@valid注解使用教程
@Valid注解的作用
注解@Valid的主要作用是用于数据校验,在接口类中的接受数据参数中添加@Valid注解,这时实体类会开启一个校验的功能。一般配合其他实体类注解使用
/**
* Controller接受参数添加注解@Valid 开启实体类参数校验
* 注: 要开启实体类参数校验,此注解必须添加,否则后续操作不会生效
*/
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand) {
brandService.save(brand);
return R.ok();
}
@Valid相关注解
@Valid相关注解有很多,小编就为大家梳理几个简单常用的,其他的希望大家自己去探索
一般配合实体类的相关注解使用
/**
* @NotBlank 适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为Null(但是可以为 Empty)
* @NotEmpty 适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0
* @NotNull 适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0
*/
@NotBlank
private String name;
/**
* @URL表示检测是否是一个合格的URL地址
*/
@URL
@NotNull
private String logo;
/**
* @Pattern 表示根据正则表达式的规则判断接收参数是否合法
*/
@NotEmpty
@Pattern(regexp = "/^[a-zA-Z]&/")
private String firstLetter;
/**
* @Min 最小值不能小于指定数字
* @Max 最大值不能大于指定数字
*/
@NotBlank
@Min(value = 0)
private Integer sort;
@Valid注解返回值
- 默认返回值
默认的返回值一般满足不了我们业务需求,看起来也相对复杂,所以我们需要将检验的错误返回信息进行二次封装
{
"timestamp": "2023-04-19T01:57:01.681+0000",
"status": 400,
"error": "Bad Request",
"errors": [
{
"codes": [
"NotNull.brandEntity.logo",
"NotNull.logo",
"NotNull.java.lang.String",
"NotNull"
],
"arguments": [
{
"codes": [
"brandEntity.logo",
"logo"
],
"arguments": null,
"defaultMessage": "logo",
"code": "logo"
}
],
"defaultMessage": "不能为null",
"objectName": "brandEntity",
"field": "logo",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotNull"
}
],
"message": "Validation failed for object='brandEntity'. Error count: 3",
"path": "/product/brand/save"
}
- 封装返回值
/**
* 使用message属性标明检验返回的具体错误信息
*/
@Pattern(regexp = "/^[a-zA-Z]&/", message = "检索首字母必须是一个字母")
/**
* Controller接口方法接收参数添加 BindingResult
*/
@RequestMapping("/save")
public R save(@Valid @RequestBody BrandEntity brand, BindingResult result) {
if (result.hasErrors()) {
Map<String, String> map = new HashMap<>();
// 封装错误信息
result.getFieldErrors().forEach((item) -> {
/**
* 获取错误提示信息
* 注: 如果我们没有用message属性标明具体检验信息,将会返回默认值
*/
String defaultMessage = item.getDefaultMessage();
// 获取错误字段名称
String field = item.getField();
map.put(field, defaultMessage);
});
return R.error(400, "数据不合法").put("data", map);
} else {
brandService.save(brand);
}
return R.ok();
}
- 返回值预览
{
"msg": "数据不合法",
"code": 400,
"data": {
"logo": "不能为null",
"sort": "不能为null",
"firstLetter": "不能为空"
}
}