Spring中添加JSR303校验

一时失言乱红尘 2022-04-23 03:32 391阅读 0赞

一.引入相关jar

  1. <!-- JSR303数据校验 -->
  2. <dependency>
  3. <groupId>org.hibernate</groupId>
  4. <artifactId>hibernate-validator</artifactId>
  5. <version>5.4.1.Final</version>
  6. </dependency>

二.在实体中引用正则表达式校验

  1. public class User {
  2. private Integer userId;
  3. @Pattern(regexp="(^[a-zA-Z0-9_-]{6,16}$)|(^[\\u2E80-\\u9FFF]{2,5}$)",message="用户昵称必须2-5位中文或者6-16位英文和数字的组合!")
  4. private String userName;
  5. @Pattern(regexp="^(M|F)$",message="性别必须是M(男)或F(女)!")
  6. private String userGender;
  7. @Pattern(regexp="^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$",message="登入账号必须为邮箱,邮箱格式不正确!")
  8. private String userEmail;
  9. @Pattern(regexp="^[a-zA-Z0-9_-]{6,18}$",message="密码必须是6-18位英文和数字的组合!")
  10. private String userPassword;
  11. ...
  12. }

三.在业务逻辑中添加验证并得到返回结果

  1. /**post请求保存新增用户
  2. * @return
  3. */
  4. @RequestMapping(value="/users",method=RequestMethod.POST)
  5. @ResponseBody
  6. public StatusCode saveUser(@Valid User user,BindingResult result) {
  7. if(result.hasErrors()) {//检验数据格式是否正确
  8. List<FieldError> errors=result.getFieldErrors();
  9. Map<String,Object> map=new HashMap<String, Object>();
  10. for(FieldError error : errors) {
  11. //错误的字段名:error.getField(),错误信息:error.getDefaultMessage()
  12. map.put(error.getField(), error.getDefaultMessage());
  13. }
  14. return StatusCode.fail().add("errorFields", map);
  15. }
  16. if(!userService.checkUser(user.getUserEmail())) {//校验邮箱是否重复
  17. Map<String,Object> map=new HashMap<String, Object>();
  18. map.put("userEmail", "该邮箱已经注册过!请重新输入!");
  19. return StatusCode.fail().add("errorFields", map);
  20. }
  21. userService.saveUser(user);
  22. return StatusCode.success();
  23. }

发表评论

表情:
评论列表 (有 0 条评论,391人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JSR303校验

    > 前端校验是一种防君子不防小人的校验方式,其一般是通过修改提交按钮样式属性来禁止其提交数据,因此,安全性还不够,故而,我们一般还要采用后端校验的方式。 > 我们可以通过在

    相关 JSR 303参数校验

    关于Bean Validation 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语义上