【问题标题】:Spring boot HTTP GET custom validationSpring Boot HTTP GET 自定义验证
【发布时间】:2017-09-06 08:01:14
【问题描述】:

我有一个带有 getMapping 和 pathValue 的控制器方法:

@ResponseBody
@Validated
@GetMapping(produces = [MediaType.APPLICATION_JSON_UTF8_VALUE],
value = '/{person}')
PersonResponse getPersonInfo (
    @Valid @PersonValidation
    @PathVariable('person') String personId,
    BindingResult bindingResult
    ) {
//  Abort if received data is not valid
    if (bindingResult.hasErrors()) {
        throw new BadHttpRequest()
}

我想要实现的是使用我的自定义验证 @PersonValidation 验证 uri 的 personId 但它不起作用,代码没有给出任何错误但程序永远不会进入我的自定义验证类...

¿我该如何解决这个问题? ¿如何使用自定义验证来验证我的路径变量?

【问题讨论】:

    标签: java rest spring-boot groovy


    【解决方案1】:

    我已经解决了我的问题。 Spring在验证路径变量方面存在一些问题...... 首先,您需要添加一个带有 MethodValidationPostProcessor 的配置类,如下所示:

    /**
    * this class is required to use our custom path variable validation on 
    * the controller class
    */
    @Configuration
    class ValidatorConfiguration {
    
        @Bean
        MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor()
        }
    }
    

    现在,在控制器类上,添加@Validated 注解很重要

    @RestController
    @Validated
    class YourController class {
    }
    

    现在您对路径变量的自定义验证将起作用,如果您想捕获异常,请将此方法添加到异常处理程序类中:

    @ControllerAdvice
    class GlobalExceptionHandler {
        @ExceptionHandler(value = [ ConstraintViolationException.class ])
        @ResponseStatus(value = HttpStatus.BAD_REQUEST)
        String handle(ConstraintViolationException e) {
            Set<ConstraintViolation<?>> violations = e.getConstraintViolations()
            StringBuilder strBuilder = new StringBuilder()
            for (ConstraintViolation<?> violation : violations ) {
                strBuilder.append(violation.getMessage() + "\n")
            }
            return strBuilder.toString()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2017-03-17
      • 2021-04-21
      • 1970-01-01
      • 2019-12-10
      • 2019-11-19
      相关资源
      最近更新 更多