当前位置: 代码迷 >> java >> 如何避免与放在不同模块中的spring验证冲突?
  详细解决方案

如何避免与放在不同模块中的spring验证冲突?

热度:72   发布时间:2023-07-31 11:35:34.0

假设我已经定义了一些像这样的bean:

@Component
@Validated
public class MyComponent {
    public void someMethod(@NotNull Integer myIntValue) {
        System.out.println(myIntValue);
    }
}

这被打包到一些jar文件中,例如: com.comppany:component:1.0.jar

这个jar文件需要依赖于(包括?):

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.1.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
  </dependency>
  <dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
  </dependency>
  <dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.0.13.Final</version>
  </dependency>

问题是:如果将此jar文件作为依赖项添加到另一个项目中,而该项目具有不同的JSR-303验证实现(例如,来自Apache的通用验证器),该怎么办? 有什么办法可以避免这种情况? 1.对“组件”模块使用一个验证提示,对其他组件使用另一个验证提示吗? 2.还是可以在编译时进行验证(如何?),那么导入“组件”模块的目标具有相同的JSR-303验证?

我已经看到用于此的optional 您将能够使用指定的Hibernate验证器来构建库。 使用您的库的客户端将要么明确指定Hibernate验证程序依赖项,要么选择自己选择的JSR-303兼容验证程序库。

假设@Validated批注未在import语句中明确提及“ hibernate”包,而是使用了API。

如果未提供依赖项,这可能会导致应用程序无法构建,但这可能没问题,因为它将使客户端通过依赖项选择变得明确。

这样的给出了更多的背景知识,这是 。

另一种方法是保留您拥有的资源,如果有人想使用其他库,则他们将从Hibernate依赖关系中排除对该库的依赖,然后添加自己的依赖。 如果客户端只希望应用程序运行而不必考虑使用什么JSR-303依赖项,那就很好。

选择哪种取决于您希望人们如何使用此库。

  相关解决方案