Why can't I use Valid parameter along with RequestParam in Spring MVC?
Solution 1
Late answer. I encounter this problem recently and find a solution. You can do it as follows,
Firstly register a bean of MethodValidationPostProcessor
:
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
and then add the @Validated
to the type level of your controller:
@RestController
@Validated
public class FooController {
@RequestMapping("/email")
public Map<String, Object> validate(@Email(message="请输入合法的email地址") @RequestParam String email){
Map<String, Object> result = new HashMap<String, Object>();
result.put("email", email);
return result;
}
}
And if user requested with a invalid email address, the ConstraintViolationException
will be thrown. And you can catch it with:
@ControllerAdvice
public class AmazonExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleValidationException(ConstraintViolationException e){
for(ConstraintViolation<?> s:e.getConstraintViolations()){
return s.getInvalidValue()+": "+s.getMessage();
}
return "请求参数不合法";
}
}
You can check out my demo here
Solution 2
@Valid can be used to validate beans. I have'nt seen it used on single string parameters. Also it requires a validator to be configured.
The @Valid annotation is part of the standard JSR-303 Bean Validation API, and is not a Spring-specific construct. Spring MVC will validate a @Valid object after binding so-long as an appropriate Validator has been configured.
Reference : http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
sofs1
Updated on June 18, 2022Comments
-
sofs1 almost 2 years
Example:
public String getStudentResult(@RequestParam(value = "regNo", required = true) String regNo, ModelMap model){
How can I use @valid for the regNo parameter here?
-
sofs1 over 9 yearsThanks for answering. May I know how can I validate a single String parameter for my Spring MVC project to validate in Sever side.
-
sofs1 over 9 years2) My another question is, can I use both @ModelAttribute and @RequestParam(value = "regNo", required = true) together?
-
Grant Lay almost 8 yearsThe MethodValidationPostProcessor bean was the missing piece of the puzzle for me. Thanks.