引入依赖
<!-- hibernate validator-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.0.Final</version>
</dependency>
<!--定义了许多常用的注解,如果是Spring boot项目则会默认依赖无需添加-->
<!--jsr 303-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
修饰对象
这里只列出常用的注解详细说明请查看这篇博客:https://juejin.cn/post/6844903902811275278#heading-0
注解名称 | 数据类型 | 说明 |
---|---|---|
@Null | 任意类型 | 验证注解的元素值是null |
@NotNull | 任意类型 | 验证注解的元素值不是null |
@NotBlank | CharSequence子类型 | 只应用于字符串且在比较时会去除字符串的首位空格 |
@NotEmpty | CharSequence子类型、Collection、Map、数组 | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@AssertFalse | Boolean,boolean | 验证注解的元素值是false |
@AssertTrue | Boolean,boolean | 验证注解的元素值是true |
public class Blog {
@NotNull(message = "主键不能为空")
private Long id;
@NotBlank(message = "标题不能为空")
private String title;
@NotEmpty(message = "内容不能为空")
private String content;
@Past(message = "创建时间需小于当前时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
传入参数校验
@RestController
@RequestMapping("/testDemo05")
public class TestDemo05 {
@PostMapping("/test1")
public void test1(@RequestBody @Validated Blog blog) {
// 测试代码
}
@GetMapping("/test2/{uid}")
public void test2(@PathVariable @NotNull(message = " uid不能为空") Integer uid) {
// 测试代码
}
}
统一异常处理类
import com.xma.dto.AjaxResult;
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.validation.*;
/**
* @author: mingan.xie
* @since: 2021/1/25
* @history: 1.2021/1/25 created by xma
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* Validation异常统一处理类
*
* @param e
* @return
*/
@ExceptionHandler(ValidationException.class)
public AjaxResult handlerValidtion(ConstraintViolationException e) {
return AjaxResult.error(e.getCause().getMessage());
}
/**
* 方法参数检验异常统一处理类
*
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public AjaxResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
return AjaxResult.error(e.getBindingResult().getFieldError().getDefaultMessage());
}
/**
* 过个参异常只返回第一个异常
*
* @return
*/
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return validatorFactory.getValidator();
}
}