一.前言
- 使用springboot搭建项目时,我们都是采用的Restful风格接口,这里面问题来了,当前端调用接口或者是其他项目调用时,传入参数时我们不能单一靠调用方来控制参数的准确性,自己也要一些参数进行判断,进行非空之类的
简单介绍
@NotEmpty
加了@NotEmpty的String类,Collection、Map、数组,是不能为null或者长度为0的(String、Collection、Map的isEmpth()方法)
@NotBlank
加了@NotBlank的String类不为null或者空
@NotNull
校验不能为null。
使用方式
引入相关的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
实体增加注解
@Data
public class TestVo{
@NotEmpty(message = "姓名不能为空")
private String name;
@NotEmpty(message = "身份证不能为空")
private String id;
controller接收实体加校验注解@Valid
public TestVotest(@RequestBody @Valid TestVo data) {
}
异常信息获取:自定义全局异常控制器
@RestControllerAdvice
public class MyExceptionHandler {
Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);
@ResponseBody
@ExceptionHandler(BindException.class)
public TestExceptionBody exceptionHandler(BindException bindException) {
try {
//这里获取的的exceptionMessage 就是@NotEmpty(message = "姓名不能为空")中的message
String exceptionMessage = Objects.requireNonNull(bindException.getBindingResult().getFieldError()).getDefaultMessage();
//自定义异常对象TestExceptionBody中自定义的message方法
return TestExceptionBody.message(exceptionMessage);
} catch (Exception e) {
logger.error(e.toString());
return TestExceptionBody
.error();
}
}
}
区别
@NotEmpty用到集合香一些
@NotBlank用到String真香
@NotNull用到基本类型香一些
看似@NotEmpty更强大,其实有一个细微区别。
加了@NotBlank还能判定String类型中的空字符串,比如“ ”也是不会通过校验的。
@NotNull,只判null,基本类型会好很多
综述建议:
String 类型用@NotBlank
基本类型用@NotNull
其他类型用@NotEmpty