Why can't I use Valid parameter along with RequestParam in Spring MVC?

前端 未结 3 1510
北海茫月
北海茫月 2020-12-16 19:06

Example:

public String getStudentResult(@RequestParam(value = \"regNo\", required = true) String regNo, ModelMap model){

How can I use @v

相关标签:
3条回答
  • 2020-12-16 19:12

    @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

    0 讨论(0)
  • 2020-12-16 19:25

    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

    0 讨论(0)
  • 2020-12-16 19:35

    one way to do it is to write a Wrapper Bean like the following :

     public class RegWrapperBean{
    
            @NotNull
            String regNo ; 
    
            public String getRegNo(){
                 return regNo ;
            }
    
            public void setRegNo(String str){
                 this.regNo=str;
            }
    
    }
    

    and your handler method will be like the following :

      @RequestMapping(value="/getStudentResult", method=RequestMethod.POST)
        public String getStudentResult(@Valid @ModelAttribute RegWrapperBean bean,
                BindingResult validationResult, Model model) {
        }
    

    and please refer to these answers here and here .

    Hope that Helps .

    0 讨论(0)
提交回复
热议问题