JSR303数据校验

JSR是什么

JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,数据校验

JSR的实现

1.javax.validation.constraints内置的实现
		@Null	对象必须为null
		@NotNull	对象必须不为null,无法检查长度为0的字符串
		@NotBlank	字符串必须不为Null,且去掉前后空格长度必须大于0
		@AssertTrue	对象必须为true
		@AssertFalse	对象必须为false
		@Max(Value)	必须为数字,且小于或等于Value
		@Min(Value)	必须为数字,且大于或等于Value
		@DecimalMax(Value)	必须为数字( BigDecimal ),且小于或等于Value。小数存在精度
		@DecimalMin(Value)	必须为数字( BigDecimal ),且大于或等于Value。小数存在精度
		@Digits(integer,fraction)	必须为数字( BigDecimal ),integer整数精度,fraction小数精度
		@Size(min,max)	对象(Array、Collection、Map、String)长度必须在给定范围
		@Email	字符串必须是合法邮件地址
		@Past	Date和Calendar对象必须在当前时间之前
		@Future	Date和Calendar对象必须在当前时间之后
		@Pattern(regexp=“正则”)	String对象必须符合正则表达式
		
2. Hibernate Validator 附加的 constraint
		@NotBlank(message =)   验证字符串非null,且长度必须大于0   
		@Email  被注释的元素必须是电子邮箱地址   
		@Length(min=,max=)  被注释的字符串的大小必须在指定的范围内   
		@NotEmpty   被注释的字符串的必须非空 ,非""[]
			***元素只能是字符串,数组,map,list***
		@Range(min=,max=,message=)  被注释的元素必须在合适的范围内 
		@URL 被注释的元素必须是url地址
3.所有注解的属性都有message出现异常,message记录异常消息,group..
  有些注解还有其他适合他们的属性,如pattern(regexp="正则表达式")

jsr的使用步骤

	1.在实体bean上的属性上加上这些校验注解
	2.在接口方法处的 用于接收前端请求体数据的 实体类 前 加上@Validated注解,表示开启数据校验

jsr303数据校验出现异常的解决办法

	1.在实体类后直接加上,@Validated({AddGroup.class}) @RequestBody BrandEntity brand,BindingResult result
	  这时如果出现异常,直接 BindingResult来处理(参照异常处理的几种方式),用一个map来接收BindingResult的错误结果list<FieldError>遍历这个list,
	  用我们准备的map存下,然后json返回前端		
	
	2.自己准备一个统一异常管理(常用)
		然后在统一异常管理类中准备一个ExceptionHandler(value= MethodArgumentNotValidException.class)
		来处理 数据校验异常,将异常出现后的逻辑全部写在其中,避免了在每个接口方法都得写异常处理的步骤
		具体如下:
			 	@ExceptionHandler(value= MethodArgumentNotValidException.class)
			    public R handleVaildException(MethodArgumentNotValidException e){
			        log.error("数据校验出现问题{},异常类型:{}",e.getMessage(),e.getClass());
			        BindingResult bindingResult = e.getBindingResult();
			
			        Map<String,String> errorMap = new HashMap<>();
			        bindingResult.getFieldErrors().forEach((fieldError)->{
			            errorMap.put(fieldError.getField(),fieldError.getDefaultMessage());
			        });
			        return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",errorMap);
			    }

JSR的分组管理

	1.@Validated(value{}) 和 校验注解的groups属性{} value和groups的类型都是class<T>[],class起到的作用就是来标注分组的
	2.可以专门准备一个valid包来 存放校验分组的类(空接口,起标识作用)
	3.value{}开启校验分组,里面的值表示哪些分组的校验注解可以生效,若为null,那么没有分组的校验注解生效
	4.value{}数组里面的值是或关系,是指只有有里面一个分组,那么校验注解生效
	5.没有标任何 group的字段,只有在 @Validated()(开启校验,没有指定任何group的字段 校验生效)

JSR自定义校验注解

	1.首先自己定义检验注解,然后定义校验器(按什么规则进行检验的)
	2.自定义校验注解:属性主要是message,groups,有的有value,regexp等
	3.自定义校验器,主要是对检验规则进行定义,如果有value和regexp等值的话,
	会对value..为基础来进行校验
	4.例子@pattern(regexp=),进入校验器,校验规则是被注解的字符串,应该是按照regexp的规则的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值