How to validate Spring MVC @PathVariable values?

前端 未结 6 1847
难免孤独
难免孤独 2020-12-09 03:28

For a simple RESTful JSON api implemented in Spring MVC, can I use Bean Validation (JSR-303) to validate the path variables passed into the handler method?

For examp

6条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-09 04:05

    You can use like this: use org.springframework.validation.annotation.Validated to valid RequestParam or PathVariable.

     *
     * Variant of JSR-303's {@link javax.validation.Valid}, supporting the
     * specification of validation groups. Designed for convenient use with
     * Spring's JSR-303 support but not JSR-303 specific.
     *
    

    step.1 init ValidationConfig

    @Configuration
    public class ValidationConfig {
        @Bean
        public MethodValidationPostProcessor methodValidationPostProcessor() {
            MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
            return processor;
        }
    }
    

    step.2 Add @Validated to your controller handler class, Like:

    @RequestMapping(value = "poo/foo")
    @Validated
    public class FooController {
    ...
    }
    

    step.3 Add validators to your handler method:

       @RequestMapping(value = "{id}", method = RequestMethod.DELETE)
       public ResponseEntity delete(
               @PathVariable("id") @Size(min = 1) @CustomerValidator int id) throws RestException {
            // do something
            return new ResponseEntity(HttpStatus.OK);
        }
    

    final step. Add exception resolver to your context:

    @Component
    public class BindExceptionResolver implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            if (ex.getClass().equals(BindException.class)) {
                BindException exception = (BindException) ex;
    
                List fieldErrors = exception.getFieldErrors();
                return new ModelAndView(new MappingJackson2JsonView(), buildErrorModel(request, response, fieldErrors));
            }
        }
    }
    

提交回复
热议问题