校验框架Hibernate Validator【原创】

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容