slomo
V2EX  ›  Java

validation 问题

  •  
  •   slomo · Jan 18, 2023 · 2970 views
    This topic created in 1386 days ago, the information mentioned may be changed or developed.

    问题相关

    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 replies  •  2023-02-01 11:21:18 +08:00
    slomo
    slomo
    OP
    Jan 18, 2023
    1
    大家有想法嘛? 谢谢谢谢!
    dyhu
    dyhu
    Jan 18, 2023
    2
    或许没有人回复的原因是 op 的问题描述不够清晰,最好有一些 code example
    liu90729
    liu90729
    Jan 18, 2023❤️3
    4
    注解写在 api ,具体的 ConstraintValidator 写在 server ,server 配置 META-INF/services/javax.validation.ConstraintValidator
    slomo
    slomo
    OP
    Jan 19, 2023
    5
    @liu90729 大佬太牛了
    Valid
    Valid
    Jan 19, 2023
    6
    为什么 @我
    slomo
    slomo
    OP
    Feb 1, 2023
    7
    @liu90729 大佬, 冒昧再问一个问题; 项目分为 api 和 server, api 定义了 api, model 和相关 validation, server 的 controller 做继承.
    server 用的是 jdk17 并且升级了 springboot3.0; api 包想向外暴露为 jdk1.8 编译的, 但是因为 javax 的命名空间变成 jakarta 而 jdk8 是不能编译 jakarta 命名空间下的类的; 请问有什么好的解决办法吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4984 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:19 · PVG 15:19 · LAX 23:19 · JFK 02:19
    ♥ Do have faith in what you're doing.