问题相关
jsr303, spring-boot-starter-validation, @InitBinder, LocalValidatorFactoryBean 等
问题描述
开发的时候将项目分成两个 moudle 开发, api module 和 server module
- api 模块中定义接口, 请求参数返回参数等, 以及参数校验的注解和 ConstraintValidator 等;
- server 模块中 controller 层继承 api 模块中定义的接口
如何将校验注解写在 api 模块, 而具体的 ConstraintValidator 写在 server 模块
- 原因: server 模块引入了 jscience 用作单位计算, api 包中需要外部接口传递单位字符串, 例如"ml", "kg"等... 但是不希望将 jscience 引入 api 模块造成其他项目也依赖 jscience;
目前看到的解决方法
- 用 ControllerAdvice, 另每个 Controller 都有一个被 @InitBinder 标注的方法, 在 @InitBinder 中, 调用 DateBinder 的 addValidators 方法;但是这种方法只能验证最外层的对象; 对于内部对象继续标注 @Valid, 不起作用
谢谢大家了!