请教一个 javax.validation 和 jakarta.validation 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zshineee
V2EX    程序员

请教一个 javax.validation 和 jakarta.validation 的问题

  •  
  •   zshineee 2023-09-19 16:03:53 +08:00 1509 次点击
    这是一个创建于 751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个 maven 项目 A ,使用的是 javax.validation ,主要用于接口参数校验,并且 deploy 到 maven 公共仓库上了;

    现在我有一个项目 B 依赖了 A ,用的是 java17 和 springboot3,用的是 jakarta.validation ,发现即使在 B 里把 jakarta.validation 替换成 javax.validation ,但是接口参数校验并不生效;

    谷歌了下也没有查到解决方案(不能把项目 A 替换成 jakarta.validation ,因为有其他 springboot2.x 的项目有在使用,有没有什么并行的方法?)

    vvtf
        1
    vvtf  
       2023-09-19 16:18:55 +08:00
    手动校验呗.
    https://stackoverflow.com/questions/19190592/manually-call-spring-annotation-validation
    基于上述方法可以+`AOP`自动实现.
    sujin190
        2
    sujin190  
       2023-09-19 16:25:26 +08:00 via Android
    不知道在 B 里添加 javax 包,添加相同注解继承自 jakarta 的注解行不行
    zshineee
        3
    zshineee  
    OP
       2023-09-19 16:27:06 +08:00
    @vvtf 好像跟我的需求不太一样,因为这个公共包写的是自定义的注解,类似 @NotNull,@Size,@Max 这样的一个集合
    zshineee
        4
    zshineee  
    OP
       2023-09-19 16:36:27 +08:00
    @sujin190 这个继承自 jakarta 怎么操作
    sujin190
        5
    sujin190  
       2023-09-19 16:47:53 +08:00 via Android
    @zshineee 就是建一个相同名称注解继承自 jakarta 里相同名称的注解呗,猜想 spring 扫描注解是通过 instanceof 来判断是不是某个类型注解来处理流程吧,不知道这样行不行
    BiChengfei
        6
    BiChengfei  
       2023-09-19 16:51:40 +08:00
    升级 A 项目版本并且发包,旧版本接着用 javax.validation ,新版本用 jakarta.validation
    bugmakerxs
        7
    bugmakerxs  
       2023-09-19 17:06:26 +08:00
    项目 A 升级版本呗,两版本并行,每次一起维护。
    Leon406
        8
    Leon406  
       2023-09-19 17:08:15 +08:00
    个人看法,仅供参考
    1.单独升级或者新出一个库 A maven 依赖库, 所有改为 jakarta EE 9+ 命名空间依赖
    2. 如果 A 升级不了的话,降级 SpringBoot 到 2.7.x 也行
    3. 字节码修改方案, 看有没有现成的插件, 没有的话自己手动修改 jar 包也行

    java EE 标准由 web 容器决定, SpringBoot 默认容器是 tomcat

    https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
    vvtf
        9
    vvtf  
       2023-09-19 17:16:09 +08:00
    @zshineee
    @sujin190
    #5 的意思是在`B`依赖`A`时, `exclude javax.validation` 的包.
    然后再`B`项目创建` javax.validation `相同类路径的注解, 然后使用`jakarta.validation `注解.
    比如:
    ```java
    package javax.validation.constraints;

    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
    @Retention(RUNTIME)
    @Repeatable(List.class)
    @Documented
    @Constraint(validatedBy = { })
    // 这里用 jakarta 的注解
    @jakarta.validation.constraints.NotNull
    public @interface NotNull {
    // ignore.
    }
    ```
    mgzu
        10
    mgzu  
       2023-09-19 17:24:03 +08:00
    拉个分支,用大版本区分吧
    zshineee
        11
    zshineee  
    OP
       2023-09-19 18:24:52 +08:00
    @vvtf 确实也是一种方法
    zshineee
        12
    zshineee  
    OP
       2023-09-19 18:25:29 +08:00
    感觉还是分版本并行维护比较好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1081 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:12 PVG 07:12 LAX 16:12 JFK 19:12
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86