使用Hibernate-Validator优雅的验证参数

第一步 添加maven依赖

  1、添加 Hibernate-Validator 依赖,如果使用了springboot,则不需要引用任何依赖,因为spring-boot-starter-web包中已经包含了Hibernate-Validator 依赖

    <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.18.Final</version>
        </dependency>

  在Vo属性上加入相应的注解 使用lombok 的@Data注解自动生成gettter/setter方法

  注意:String 使用@NotBlank Integer类型使用@NotNull  其他类型还暂时没用到

第二步建立对应的Vo

@Data
@NoArgsConstructor
@AllArgsConstructorpublic class User {
    @NotBlank(message = "姓名不能为空")
    private String name;
  @NotNUll(message="年龄不能为空")
private Integer age; }

第三部 使用

1、如果是Post方法,需在@RequestBody 的前面或者后面加上@Valid注解

/**
     * 测试校验框架返回结果格式
     */
    @PostMapping(value = "/validator")
    public String testValidator(@RequestBody @Valid User user){
        return "校验成功...";
    }

2、get方法,需要在类上加入注解@Validated,然后再加入其它对应注解

@RestController
@RequestMapping("/user")
@Validated
public class UserController {

    /**
     * 测试校验框架返回结果格式
     */
    @GetMapping(value = "/validator2")
    public String testValidator2(@NotBlank(message = "姓名不能为空") String name){
        return "校验成功...";
    }

}

第四步 定制校验的返回信息

利于spring中的@ControllerAdvice定制优雅的返回信息,spring自带的全局异常处理机制

/**
 * @Description: 全局的异常处理
 * @Author: chenmingjian
 * @Date: 18-10-31 19:00
 */
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 参数校验统一异常处理
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResultEntity handleBindException(MethodArgumentNotValidException ex) {
FieldError fieldError = ex.getBindingResult().getFieldError();
log.warn("参数校验异常:{}({})", fieldError.getDefaultMessage(),fieldError.getField());
return ResultEntity.faill(211,fieldError.getDefaultMessage(),null);
}
}
ResponseEntity类如下:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @CreateDate 2021/12/1 17:30
 * @Author yuan
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultEntity<T> {

    private Integer code;

    private String message;

    private T data;

    public  static <T> ResultEntity<T> faill(Integer code,String msg,T t){
        return new ResultEntity<T>(code,msg,t);
    }
}

常用注解

 

posted @ 2021-12-04 17:07  灯下一个人  阅读(280)  评论(0编辑  收藏  举报