JSR303校验注解和自定义校验注解的使用

这篇文章主要介绍了JSR303校验注解和自定义校验注解的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

引入validation依赖

  org.springframework.bootspring-boot-starter-validation

Null检查
@Null(message = "")       验证对象是否为null
@NotNull(message = "")    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank(message = "")   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty(message = "")  检查约束元素是否为NULL或者是EMPTY.

Booelan检查
@AssertTrue(message = "")     验证 Boolean 对象是否为 true 
@AssertFalse(message = "")    验证 Boolean 对象是否为 false  

长度检查
@Size(min=, max=,message = "") 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 
@Length(min=, max=,message = "") Validates that the annotated string is between min and max included.

日期检查
@Past(message = "")           验证 Date 和 Calendar 对象是否在当前时间之前 
@Future(message = "")      验证 Date 和 Calendar 对象是否在当前时间之后 
@Pattern(regexp = "",message = "")     验证 String 对象是否符合正则表达式的规则

数值检查

建议使用在包装类型(Integer这类),不建议使用在int类型上,
 因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min(message = "")     验证 Number 和 String 对象是否大等于指定的值 
@Max(message = "")     验证 Number 和 String 对象是否小等于指定的值 
@DecimalMax(message = "") 值不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin(message = "") 值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits(message = "")     验证 Number 和 String 的构成是否合法 
@Digits(integer=,fraction=,message = "") 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=,message = "") 检查数字是否介于min和max之间.
@Valid  递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber(message = "") 信用卡验证
@Email(message = "")  验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=,message = "")
@URL(protocol=,host=, port=,regexp=, flags=,message = "")

每一个校验注解都有一个message用来定义错误信息的返回信息,也有一个groups用来定义不同情形写生效的注解,需要传入一个接口类型的类用来定义。

在进行分组校验的情况下,没有携带groups的校验注解不生效,不是一组的也不会生效,使用方式先在要校验的字段标记注解并且填入groups=接口名.class需要编写一个空接口用来标记分组

不分组校验的情况下不标记groups的注解也会生效

在springboot中使用@Validated(value = {接口名.class})来指定那个groups生效

自定义校验可以使用@Pattern 输入正则表达式,会根据正则校验

在实体中添加校验注解

前端将数据提交给后端的controller、controller通过映射将数据映射到实体,在映射的时候会进行校验,如果校验不通过会通过message填入的信息将错误信息返回给controller中对于的方法

在实体层添加注解,其中message是返回的消息

 public class Person { @NotEmpty(message="姓名不能为空") private String name; private int userId; @Length(min=6,max=10,message="密码必须在6-10位之间") private String password; @Email(message="邮箱不符合格式") private String email; } 

开启校验

在入请求体参数加上@Valid注解

在springboot中使用@Validated注解,是JSR303规范中springboot的实现

 @PostMapping("/person") public Object addPerson(@RequestBody @Valid Person person, BindingResult result) { if (result.hasErrors()) { // 判断异常,将异常返回 List allErrors = result.getAllErrors(); //获取所有的异常信息 for (ObjectError error : allErrors) { System.out.println(error.getCode() + "\t" + error.getDefaultMessage()); } } return person; } 

集中处理异常示例代码

 import com.atguigu.common.exception.BizCodeEnume; import com.atguigu.common.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.HashMap; import java.util.Map; /** * 集中处理所有异常 */ @Slf4j @RestControllerAdvice(basePackages = "抛异常的类全路径") public class GulimallExceptionControllerAdvice { @ExceptionHandler(value= MethodArgumentNotValidException.class) public R handleVaildException(MethodArgumentNotValidException e){ log.error("数据校验出现问题{},异常类型:{}",e.getMessage(),e.getClass()); BindingResult bindingResult = e.getBindingResult(); Map 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); } @ExceptionHandler(value = Throwable.class) public R handleException(Throwable throwable){ log.error("错误:",throwable); return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(),BizCodeEnume.UNKNOW_EXCEPTION.getMsg()); } }

自定义校验注解

自定义校验注解必须要有三个内容values,message,groups

也就是必须要哟下面的3行代码

 String message() default "{com.atguigu.common.valid.ListValue.mess

以上就是JSR303校验注解和自定义校验注解的使用的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java