✅P66_JSR303数据校验
大约 2 分钟
JSR303是后端校验数据的一种规范。
使用JSR303数据校验的步骤
一、导入SpringBoot整合JSR303的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
常用JSR303注解的作用:
Bean Validation 中内置的constraint
Hibenate Validator中额外附加的 constriant
二、为实体类字段标记注解
例如:品牌名不能是个空字符串,我们可以标记@NotEmpty并且可以自定义校验信息
@NotEmpty
private String brandName;
message默认使用的是ValidationMessages_zh_CN.properties中的配置信息,我们可以自定义校验信息
@NotEmpty(message="品牌名不能为空")
private String brandName;
三、告诉SpringMVC我们要校验的实体类,通过使用@Valid,如果不使用此注解则我们标记的校验注解不会生效
@RequestMapping("/save")
public R save1(@Valid @RequestBody BrandEntity brand) {
brandService.save(brand);
return R.ok();
}
status:400表示:这个是校验失败的报错信息。但是,响应体的信息显然并不符合我们的要求,没有错误提示
四、使用BindingResult获取校验的信息
/**
* 保存
*/
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult bindingResult){
if (bindingResult.hasErrors()){
Map<String,String> map=new HashMap<>();
// 获取所有的校验错误结果并且进行遍历
bindingResult.getFieldErrors().forEach((item)->{
// 1.获取校验错误的字段名
String name=item.getField();
//2.获取校验错误信息
String message=item.getDefaultMessage();
map.put(name,message);
});
return R.error(400,"提交数据不合法").put("data",map);
}else{
brandService.save(brand);
return R.ok();
}
}
测试结果如下:
为BrandEntity的属性设置校验注解
/**
* 品牌logo地址
*/
@NotBlank(message = "品牌logo地址不能为空")
@URL(message = "logo必须是一个合法的url地址")
private String logo;
/**
* 检索首字母
*/
@NotEmpty(message = "检索首字母不能为空")
@Pattern(regexp = "^[a-zA-Z]$", message = "检索首字母必须是一个字母")
private String firstLetter;
/**
* 排序
*/
@NotNull(message = "排序不能为空")
@Min(value = 0, message = "排序必须大于等于0")
private Integer sort;