一.引入相关jar
<!-- JSR303数据校验 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
二.在实体中引用正则表达式校验
public class User {
private Integer userId;
@Pattern(regexp="(^[a-zA-Z0-9_-]{6,16}$)|(^[\\u2E80-\\u9FFF]{2,5}$)",message="用户昵称必须2-5位中文或者6-16位英文和数字的组合!")
private String userName;
@Pattern(regexp="^(M|F)$",message="性别必须是M(男)或F(女)!")
private String userGender;
@Pattern(regexp="^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$",message="登入账号必须为邮箱,邮箱格式不正确!")
private String userEmail;
@Pattern(regexp="^[a-zA-Z0-9_-]{6,18}$",message="密码必须是6-18位英文和数字的组合!")
private String userPassword;
...
}
三.在业务逻辑中添加验证并得到返回结果
/**post请求保存新增用户
* @return
*/
@RequestMapping(value="/users",method=RequestMethod.POST)
@ResponseBody
public StatusCode saveUser(@Valid User user,BindingResult result) {
if(result.hasErrors()) {//检验数据格式是否正确
List<FieldError> errors=result.getFieldErrors();
Map<String,Object> map=new HashMap<String, Object>();
for(FieldError error : errors) {
//错误的字段名:error.getField(),错误信息:error.getDefaultMessage()
map.put(error.getField(), error.getDefaultMessage());
}
return StatusCode.fail().add("errorFields", map);
}
if(!userService.checkUser(user.getUserEmail())) {//校验邮箱是否重复
Map<String,Object> map=new HashMap<String, Object>();
map.put("userEmail", "该邮箱已经注册过!请重新输入!");
return StatusCode.fail().add("errorFields", map);
}
userService.saveUser(user);
return StatusCode.success();
}