美文网首页
校验框架Hibernate Validator【原创】

校验框架Hibernate Validator【原创】

作者: 程序员不会写代码 | 来源:发表于2022-09-25 17:53 被阅读0次

参考书籍《Hibernate Validator--JSR 303 的参考实现》

为何要使用校验框架

大部分后端开发都非常的苦恼,明明需求不怎么难,但是因为业务需求的限制,许多的参数都需要校验,比如校验用户输入的邮箱是否符合邮箱的格式,电话号是否符合某个号段,用户名是否没有包含特殊符号等等,可能逻辑代码就那么多但是controller层或者service的校验逻辑的写了几百行,验证影响了代码的可读性以及代码复用,甚至出现bug排查起来光看校验逻辑就要看半天,这是让开发非常头疼的事情,于是有了项目上的大佬们自己封装自己的校验工具类,但是有的项目频繁的换人,早成的情况是新来的压根就不知道前面的人已经造过轮子,导致代码里面非常的重复轮子,遇到这种事情莫慌,咋们在项目里面统一规定有用一个校验框架就完事了------Hibernate Validator 一个非常强大的校验框架的

  1. 校验入参对象中的某个属性不为空
接口controller层代码

    public GetAndonDeviceResponse getAndonResponseDevice(@RequestBody @Validated GetAndonDeviceRequest request) {
  
    }

请求对象中的属性
public class GetAndonDeviceRequest extends PagedRequest {
    private String workerNumber;
    @NotEmpty(message = "ANDON_STATUS_NOT_EMPTY")
    private String status;
    private List<Long> andonClassIds;

首先解释下@RequestBody这个注解不是校验框架的,加上这个注解的原因是因为你需要校验的属性在GetAndonDeviceRequest这个对象中,而前后端分离的项目前端传过来的就是json,这个注解表明的是去做返序列化,值得注意的是

@RequestBody(required = false)

这个注解中的requird默认等于true表明的是不管如何前端的body必须穿,不传就会造成反序列失败,而等于false表明的意思就是body中有值就反序列化,没有就不会做,因为我这里需要校验对象中的属性值,因此我这里强制要求前端必须传这个body给我,因为没有body反序列得到的request就是一个null里面啥都没有去做校验就做了

我这就在controller的接口的如请请求参数中添加了来那个注解

@RequestBody 和@Validated

在需要校验的对象的属性上面添加了

@NotEmpty(message = "ANDON_STATUS_NOT_EMPTY")

notEmpt这个注解表明的是这个属性值不能等于空或者长度不能等于0
message
是当status不符合要求的时候就需要抛出的错误提示信息抛出的异常堆栈为MethodArgumentNotValidException这个错误
在使用这些注解之前需要先在maven中添加依赖

 <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-validator</artifactId>
             <version>6.0.8.Final</version>
  </dependency>
这里的版本可以自己去选择

这个框架的校验的校验是在这个对象生成的时候进行校验的

  1. 对象图的校验
    所谓对象图就是对象里面的子对象的属性的校验
public class InsertAndUpdateAndonBinRequestType extends BaseRequest {
    @Valid
    private List<AndonBinDTO> list;
}



public class AndonBinDTO {
    private String id;
    @NotEmpty(message = "bin_code_not_empty")
    private String andonBinCode;

如果我需要校验InsertAndUpdateAndonBinRequestType中的AndonBinDTO中的andonBinCode是否符合要求,只需要在InsertAndUpdateAndonBinRequestType的list属性上加上一个@Valid注解,在需要校验的子对象的属性上加上对应的注解就可以了

Hibernate Validator支持两种校验模式,第一种是快速失败模式,也是框架的默认模式,技术当遇到第一个需要校验的参数不符合要求就返回校验结果,第二种是返回所有的校验结果在抛出异常,抛出的异常是一个异常数组,这个需要配置,建议在使用过程中不要去配置,因为“默认大于配置”

相关文章

网友评论

      本文标题:校验框架Hibernate Validator【原创】

      本文链接:https://www.haomeiwen.com/subject/rbxvqctx.html