让Controller支持对平铺参数执行@Valid数据校验
每篇一句
在金字塔塔尖的是实践,学而不思则罔,思而不学则殆(现在很多编程框架都只是教你碎片化的实践)
相关阅读
注意一下:这里
arg0 arg1
并没有按照顺序来,字段可别对应错了~~~
由此可见,校验生效了。抛出了javax.validation.ConstraintViolationException
异常,这样我们再结合一个全局异常的处理程序,也就能达到我们预定的效果了~
这种方案一样有一个非常值得注意但是很多人都会忽略的地方:因为我们希望能够代理Controller
这个Bean,所以仅仅只在父容器中配置MethodValidationPostProcessor
是无效的,必须在子容器(web容器)的配置文件中再配置一个MethodValidationPostProcessor
,请务必注意~
有小伙伴问我了,为什么它的项目里只配置了一个
MethodValidationPostProcessor
也生效了呢? 我的回答是:检查一下你是否是用的SpringBoot。
其实关于配置一个还是多个MethodValidationPostProcessor
的case,其实是个Bean覆盖有很大关系的,这方面内容可参考:
同样的完美完成了我们的校验需求。针对我自己书写的这一套,这里继续有必要再说说两个小细节:
- 本例的
@PathVariable("id")
是指定的value
值的,因为在处理@PathVariable
过程中我并没有去分析字节码来得到形参名,所以为了简便此处写上value值,当然这里是可以优化的,有兴趣的小伙伴可自行定制 - 因为制定了
value
值,错误信息中也能正确识别出字段名了~ -
在
Spring MVC
的自动数据封装体系中,value
值不是必须的,只要字段名对应上了也是ok
的(这里面运用了字节码技术,后文有讲解)。但是在数据校验中,它可并没有用到字节码结束,请注意做出区分~~~总结
本文介绍了两种方案来处理我们平时遇到
Controller
中对处理方法平铺类型的数据校验问题,至于具体你选择哪种方案当然是仁者见仁了。(方案一简便,方案二需要你对Spring MVC
的处理流程API
很熟练,可炫技)
数据校验相关知识介绍至此,不管是Java
上的数据校验,还是Spring
上的数据校验,都可以统一使用优雅的Bean Validation
来完成了。希望这么长时间来讲的内容能对你的项目有实地的作用,真的能让你的工程变得更加的简介,甚至高能。毕竟真正做技术的人都是追求一定的极致性,甚至是存在代码洁癖,甚至是偏执的~
此种洁癖据我了解表现在多个方面:比如没使用的变量一定要删除、代码格式不好看一定要格式化、看到重复代码一定要提取公因子等等~
知识交流
若文章格式混乱,可点击
:原文链接-原文链接-原文链接-原文链接-原文链接
==The last:如果觉得本文对你有帮助,不妨点个赞呗。当然分享到你的朋友圈让更多小伙伴看到也是被作者本人许可的~
==
若对技术内容感兴趣可以加入wx群交流:Java高工、架构师3群
。
若群二维码失效,请加wx号:fsx641385712
(或者扫描下方wx二维码)。并且备注:"java入群"
字样,会手动邀请入群