不说废话开头先给出maven依赖,写教程贴出依赖都是耍流氓。
javax.validation
validation-api
2.0.1.Final
用场景说话场景一:前端传过来的字段如何在后台做效验,最老的方法就是if else显得不是很灵活。如果前端传来100个字段就得写许多多余的代码。
第一个场景就是在后台创建的实体和前端传来的字段做对应映射,加上JSR303注解来做灵活的效验
1:给Bean实体添加校验注解:javax.validation.constraints(大部分注解都在这个包下),并定义自己的message提示如下:
@NotBlank(message = "品牌名不能为空")
private String name;
@NotNull(message = "显示状态不能为空")
private Integer showStatus;
注意:@NotBlank这个注解效验非空是只能效验字符串而@NotNull可以效验所有。所以我这里单独特意拿这两个做演示
2:开启校验功能@Validated很多人问为什么不用@Valid其实这个也可以但是不利于后面扩展功能。@Validated是在@Valid上又封装了一层,
比如加上了分组功能这个后面说 (效果:校验错误以后会有默认的响应;)在给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果
示列Controller:
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:brand:save")
public R save(@Validated @RequestBody BrandEntity brand, BindingResult result) {
/**
* result.hasErrors()如果前端传来的值和在实体类标注的注解不对应就返回false。
* 比如在实体在name字段标注了@NotBlank(message = "品牌名不能为空")而前端没传name就返回了false
*/
if (result.hasErrors()) {
Map map = new HashMap<>();
//1、result.getFieldErrors()获取校验的错误结果对象然后遍历
for (FieldError fieldError : result.getFieldErrors()) {
//FieldError 获取到错误提示
String message = fieldError.getDefaultMessage();
//获取错误的属性的名字
String field = fieldError.getField();
map.put(field, message);
}
return R.error(400, "提交的数据不合法").put("data", map);
} else {