Files
kaka111222333-kaka111222333…/_posts/2017-05-27-mvc-validator.md
2019-11-17 01:12:14 +08:00

57 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 记一次在spring-mvc中踩坑的经历
tags: spring mvc java
categories: java
---
今天打算在项目中加入数据验证功能,具体可参考 [数据验证][validator]
过程无须赘述
配置完成后,奇怪的现象发生了,`BindingResult.hasErrors()`永远返回false
![hasErrors][hasErrors]
这是什么情况? validator 未指定?我赶紧检查配置:
![notNull][notNull]
![driven][driven]
配置没有问题,日志能够正常打印,且没有错误,排除类加载失败的可能。
上google搜索一下
![google][google]
翻看了第一页的回复大多来自stackoverflow无非是让你引入包, 加配置, 我项目里配置符合这些回复的要求, 所以需要另想办法
自己动手吧!我加入如下代码以验证validator是否被正确加载
![initBinder][initBinder]
validator果然为null, 且如果拿到validator对象并set进去就可以解决`BindingResult.hasErrors()`永远返回false的问题,
然而这种处理方式需要在每个Controller中写一遍initBinder, 这种方式并不完美。
是什么原因造成validator丢失呢?
我们知道`annotation-driven`会在spring中自动注册多个bean, 详情请移步[自动注册][自动注册]
会不会是项目中存在某些配置覆盖了其中的bean造成了validator丢失?
仔细扫描一下配置文件, 发现果然如此, 项目中为了更换json转换器, 自定义了一个bean
![adapter][adapter]
到了这个地步基本上找到原因了解决方式很简单将validator绑定起来就可以了
![validator-config][validator-config]
[validator]:http://jinnianshilongnian.iteye.com/blog/1733708
[自动注册]:https://my.oschina.net/HeliosFly/blog/205343
[hasErrors]:{{"/mvc-validator/hasErrors.jpg" | prepend: site.imgrepo }}
[validator-config]:{{"/mvc-validator/validator-config.jpg" | prepend: site.imgrepo }}
[google]:{{"/mvc-validator/google.jpg" | prepend: site.imgrepo }}
[initBinder]:{{"/mvc-validator/initBinder.jpg" | prepend: site.imgrepo }}
[adapter]:{{"/mvc-validator/adapter.jpg" | prepend: site.imgrepo }}
[driven]:{{"/mvc-validator/driven.jpg" | prepend: site.imgrepo }}
[notNull]:{{"/mvc-validator/notNull.jpg" | prepend: site.imgrepo }}