一.前言
- 使用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 = "姓名不能为空")中的messageString 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