V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
slomo
V2EX  ›  Java

validation 问题

  •  
  •   slomo · 2023-01-18 14:32:00 +08:00 · 1587 次点击
    这是一个创建于 678 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题相关

    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, 不起作用

    谢谢大家了!

    7 条回复    2023-02-01 11:21:18 +08:00
    slomo
        1
    slomo  
    OP
       2023-01-18 15:34:12 +08:00
    大家有想法嘛? 谢谢谢谢!
    dyhu
        2
    dyhu  
       2023-01-18 15:44:09 +08:00
    或许没有人回复的原因是 op 的问题描述不够清晰,最好有一些 code example
    liu90729
        4
    liu90729  
       2023-01-18 15:52:09 +08:00   ❤️ 3
    注解写在 api ,具体的 ConstraintValidator 写在 server ,server 配置 META-INF/services/javax.validation.ConstraintValidator
    slomo
        5
    slomo  
    OP
       2023-01-19 16:16:20 +08:00
    @liu90729 大佬太牛了
    Valid
        6
    Valid  
       2023-01-19 17:52:38 +08:00
    为什么 @我
    slomo
        7
    slomo  
    OP
       2023-02-01 11:21:18 +08:00
    @liu90729 大佬, 冒昧再问一个问题; 项目分为 api 和 server, api 定义了 api, model 和相关 validation, server 的 controller 做继承.
    server 用的是 jdk17 并且升级了 springboot3.0; api 包想向外暴露为 jdk1.8 编译的, 但是因为 javax 的命名空间变成 jakarta 而 jdk8 是不能编译 jakarta 命名空间下的类的; 请问有什么好的解决办法吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:54 · PVG 12:54 · LAX 20:54 · JFK 23:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.