项目对输入参数验证使用了 validation-api:2.0 组件,使用比较方便,只需要在入参的 VO 或者 DTO 对象前加一个 @Validated 既开启了参数验证。之后在 VO 对象属性前加上 @NotBlank(message = "xxx不能为空"),就可以实现数据的校验,并返回错误内容。

当然,组件返回的数据需要通过全局异常处理类处理一下(不然返回结构较为复杂):

@RestControllerAdvice
public class GlobalExceptionHandler {

    ...

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultDTO handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        logger.error(e.getMessage(), e);
        String message = e.getBindingResult().getFieldError().getDefaultMessage();
        return ResultDTO.error(message);
    }

}

现对 VO 对象增加了一些属性,包括了 BigDecimal 类型,都是用 @NotBlank 来校验,然后就报错了:No validator could be found for constraint 'javax.validation.constraints.NotBlank'

百度了一圈原来 @NotBlank 只能用来验证字符串,Hibernate-Validator(数据校验框架)

常用注解验证类型

这边没有最小值、最大值之类的限制,所以更换成 @NotNull 之后就可以了。