目录
2.controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数
如果要校验前端参数,如果没有使用注解的习惯,会在逻辑中写一些冗长的判断。
比如,校验前端参数是否为空:
if (StringUtils.isBlank(vo.getMobile())) {
return GraceJSONResult.errorMsg("手机号不能为空!");
}
当需要校验的参数有很多的时候,代码就很冗长,校验注解配合BindingResult来使用会减少很多代码量。
步骤:
- 前端传递的实体属性中,需要校验的属性要打上注解。
- controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数
- 判断BindingResult是否保存了错误的验证信息,抽取的错误信息校验
1.前端传递的实体属性中,需要校验的属性要打上注解。
@Data
public class RegistLoginBO {
@NotBlank(message = "手机号不能为空")
private String mobile;
}
2.controller中需要校验的实体类需要使用@Valid注解,和加入BindingResult的参数
public GraceJSONResult doLogin(@RequestBody @Valid RegistLoginBO registLoginBO,
BindingResult result);
3.判断BindingResult是否保存了错误的验证信息
@NotBlank(message = "手机号不能为空"),这是我们的一个属性需要的判断条件和错误提示,其他属性都会有类似的判断条件和提示,所以这部分可以做成map的格式。
BindingResult有一个getFieldErrors()方法来获取每个属性的错误提示,会返回一个List,遍历此list,把报错的属性和错误信息装进map。
/**
* 获取BO中的错误信息
*
* @param result
*/
public Map<String, String> getErrors(BindingResult result) {
Map<String, String> map = new HashMap<>();
List<FieldError> errorList = result.getFieldErrors();
for (FieldError error : errorList) {
// 发送验证错误的时候所对应的某个属性
String field = error.getField();
// 验证的错误消息
String msg = error.getDefaultMessage();
map.put(field, msg);
}
return map;
}
这个方法抽取出来以后可以复用,放在父类方法或者工具类中即可。
经过完善的代码就变成了:
if (result.hasErrors()) {
Map<String, String> map = getErrors(result);
return GraceJSONResult.errorMap(map);
}
常见的校验注解: