美文网首页
2020-11-15

2020-11-15

作者: 为泄废举义添砖加瓦开花攻城撕 | 来源:发表于2020-11-15 09:06 被阅读0次


java自定义校验器

以前在公司写接口的时候,参数都是用Map接收,因为不用定义实体类,这样可以节省很多后台工作量,接口字段跟前端约定好,由前端传输,但是也带来了很多问题,因为之前大家没有写接口文档的习惯,所以几百个接口都没有留存接口文档,每次找接口都得屡代码。

并且,最主要的是,以前因为要快速上线迭代,怎么快速怎么来,很多接口字段的校验,由前端来做,后端不需要重复校验,现在比较稳定下来了,领导们要求测试对接口的测试,精确到字段是否为空,格式,都要精准匹配。稍微有点不一样,就要提bug。为了方便接口字段校验,现在用实体类做接收。

前几天遇到一个问题,现在想想也不算是问题。

要保存用户上传的省市区信息,前端是展示文字,上传后端时是传输代码,省市区在一个字段里,用逗号分割,比如,居住地省市区编码liveAddressCode:"12345,2345,3345",并且后台要拆分独立上送下游系统。spring自带的校验器无法满足使用需求,需要自定义注解和校验器。

最开始是这样设计的实体类(因为是沿用以前的老逻辑,所以并没有把居住地省市区编码单独拆开,为了方便前端快速开发,而且,@JSONField字段表明了,以前也不知道是怎么设计的字段,完全不符合明明规范啊。。)

省市区编码字段 单独定义居住省,居住市,居住区编码 对应字段的get方法。

。但是这样,测试妹子调接口,如果传了非空的,但是不符合格式的字段,实例化的时候就会报错了。并不能返回具体明确的提示,被提了一个bug。

然后我加了自定义注解

自定义注解(有不明白的请自行百度) 自定义校验器(有不明白的可以百度,有很多讲解) 具体使用

但是这样,仍然会报错(liveAddressCode传不带逗号的字符串),实例化的时候,总是会报out of bounds exception。试过很多方法,什么lazy注解,妄图在实例化的时候,先不实例化该字段,等校验通过,后面使用的时候,再实例化。然并卵。 .后来突然想到了,我tm的为什么要加字段啊?我只加get方法就可以了啊卧槽!害得我搞到半夜!!!

(因为前端传了很多字段,我这个实体类里的字段,要拆开分别上送多个下游系统,所以不能只传实体类,是使用map上送的)

于是我删除了单独的省,市,区字段。

实例化就不会报异常了

然后又增加了一个配置类,只要一个校验不通过就返回(忘了从哪个博主那里看到的了,十分感谢)。可以省不少性能啊,哇哈哈

这个是从网上扒的

故事到这里基本就结束了。

还有之前研究过的一个校验,也是从别的技术博主那里看到的,希望看到的能指出。

因为有很多字段,其实并不是前端传过来的时候,就想要去校验,是根据代码或者业务逻辑的不同,而自主校验,就没办法使用这种方式了。

so,我也是添加了自定义注解。

这里是在数据库里配置了,并且在项目启动的时候,就加载到redis里了。使用的时候,根据配置的key,从redis里把配置取出来进行判断 抛出异常,统一捕捉。

以上全部校验,都是在controller层统一捕捉

可以定义一个类,使用@RestControllerAdvice与@ControllerAdvice注解,进行全局异常捕捉,具体的也可以百度。

或者像我们项目一样,定义baseController,其他全部controller都继承该baseController,但该baseController并未被spring管理。

好了,本次记录就到这里结束了。肯定不是十分完美,看到的各位大佬们,多沟通。

相关文章

  • 周日 2020-11-15 23:30 - 06:41 晴 06

    2020-11-15 晚上不想学的一天周日 2020-11-15 23:30 - 06:41 晴 06h19m 一...

  • 祺哥竹枝二首

    2020-11-15 (一)竹枝词.褀哥给妈妈过生日 2020-11-15 全家老小笑声高,品酒喝茶海底捞。 长夜...

  • ffmpeg_sample解读_transcoding

    title: ffmpeg_sample解读_transcodingdate: 2020-11-15 10:15:...

  • 2020-11-15

    【318号】2020-11-15点赞列表 http://www.jianshu.com/p/36f1a41df6a...

  • 鬼脸一人圆口汉50sc3041

    原创 李大叔 清江风情 2020-11-15 图谱编号:ESB_TP_50_sc3041 直径:~36.4mm 厚...

  • 2020-11-15第26周复盘

    2020-11-15第26周复盘 11.9 认知升级: 行为升级: 11.10 认知升级: 无 行为升级: 无 1...

  • 034-种瓜得瓜,种豆的豆

    2020-11-15 种瓜得瓜,种豆得豆(You reap what you sow) 婚姻关系的经营,如此! 人...

  • 2020-11-15

    [http://]时间管理大约练课件(2020-11-15) 一、引言互动1、时间可以管理吗?时间是不可以管理的,...

  • 2020-11-15 思考成长周复盘

    一 时间 2020-11-09 ~ 2020-11-15 二 围绕思考成长所做的事情 1.每日早起2.本周共成功安...

  • 搜索引擎有哪些

    文章发布时间:2020-11-15 百度搜狐搜狗googleBing应搜搜: 腾讯旗下产品。qq上搜索东西的首选3...

网友评论

      本文标题:2020-11-15

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