前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSR303后端校验详解

JSR303后端校验详解

作者头像
唔仄lo咚锵
发布2020-09-15 14:36:05
7040
发布2020-09-15 14:36:05
举报

JSR303后端校验

  • 什么是JSR303?
  • 导入jar包
  • 校验规则
  • 在属性上添加注解
  • 添加@Valid注解

什么是JSR303?


JSR 303 - Bean Validation提供了一种后端数据校验支持,如果一键f12修改前端代码成功绕过前端校验,那么就会存入非法数据,所以后端校验十分重要。应该前端+后端+数据库的校验约束都不能少,全面保障数据规范安全。

导入jar包


在pom.xml引入依赖,不了解Maven可以点这里

代码语言:javascript
复制
<!-- JSR303数据校验支持 -->
	<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.1.0.Final</version>
    </dependency>
<!-- tomcat7以下el表达式版本不兼容的话,还要导入下面jar包-->
    <dependency>
       <groupId>javax.el</groupId>
       <artifactId>javax.el-api</artifactId>
       <version>3.0.0</version>
    </dependency>

校验规则


Constraint

详细信息

@Null

被注释的元素必须为 null

@NotNull

被注释的元素必须不为 null

@AssertTrue

被注释的元素必须为 true

@AssertFalse

被注释的元素必须为 false

@Min(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max, min)

被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction)

被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past

被注释的元素必须是一个过去的日期

@Future

被注释的元素必须是一个将来的日期

@Pattern(value)

被注释的元素必须符合指定的正则表达式

@Email

被注释的元素必须是电子邮箱地址

@Length

被注释的字符串的大小必须在指定的范围内

@NotEmpty

被注释的字符串的必须非空

@Range

被注释的元素必须在合适的范围内

上面是官网给出的所有校验规则,其中@Pattern是比较常用的,可以自定义规则。

在属性上添加注解


在JavaaBean的属性上加上注解,其中message设置错误信息,可以不写使用默认。

代码语言:javascript
复制
public class User {
	@NotNull(message="×:账号不能为空")
    private Integer uid;

	@NotNull
	@Length(min=6,max=20,message="×:密码长度须为6-20")
    private String password;
    
    @Pattern(regexp="(^[a-zA-Z0-9_-]{3,16}$)|(^[\u2E80-\u9FFF]{2,5})"
    		,message="×:用户名为2-5中文或3-16英文数字组合")
    private String name;

    //@Pattern(regexp="^([a-zA-Z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
    //		,message="×:邮箱格式错误")
    @Email
    private String email;
	
	@Past
	private Date birthday;

添加@Valid注解


在Controller方法的参数上加上@Valid注解,出错后的错误信息会放在 BindingResult 的对象参数中。

代码语言:javascript
复制
	@PostMapping("/user")
	@ResponseBody
	public Msg saveUser(@Valid User user,BindingResult result){
		if (result.hasErrors()){
	            Map<String,Object> map = new HashMap<>();
	            //校验失败,应该返回失败,在模态框中显示校验失败的错误信息
	            List<FieldError> errors = result.getFieldErrors();
	            for (FieldError fieldError:errors){
	                System.out.println("错误的字段名:"+fieldError.getField());
	                System.out.println("错误信息:"+fieldError.getDefaultMessage());
	                map.put(fieldError.getField(),fieldError.getDefaultMessage());
	            }
	            return Msg.fail().add("errorFields",map);
	        }else {
	        	userService.saveUser(user);
	    		return Msg.success();
	        }
	}

原创不易,请勿转载本不富裕的访问量雪上加霜

博主首页:https://blog.csdn.net/qq_45034708

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JSR303后端校验
  • 什么是JSR303?
  • 导入jar包
  • 校验规则
  • 在属性上添加注解
  • 添加@Valid注解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档