当前位置: 首页 > 知识库问答 >
问题:

带swagger的javax验证

沈实
2023-03-14

我试图使用swagger来记录我的Restapi,并且取得了一些成功,但是在受限资源参数方面,我遇到了一堵墙。我正在使用JBoss RESTEasy与Hibernate验证器提供程序和Jackson 2.x注释的POJO。我遇到的问题是,当遇到@DecimalMin/@DecimalMax注释时,我得到一个

java.lang.NoSuchMethodError: javax.validation.constraints.DecimalMin.inclusive()Z 

似乎swagger正在尝试使用较新版本的javax.validation.constraints.*(v1.1.0.Final)库,而jboss正在使用较旧版本(v1.0.0.GA)。我已经尝试了我能想到的一切来包含适当的库,但无济于事。

环境是JBoss EAP 6.4.0.GA

我的招摇过市条目(pom.xml):

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jaxrs</artifactId>
    <version>1.5.8</version>
</dependency>

示例POJO片段:

...
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
...
@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "altM",
    "altDatum"
 })
public class Altitude {
@JsonProperty("altM")
@DecimalMin("-2000")
@DecimalMax("10000")
@NotNull
private Double altM;
...

我尝试了很多东西,但我学到的越多,我相信下面是我两次最相关的尝试,以理顺我的依赖关系:

尝试1:从Hibernate验证器中排除javax.validation

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-hibernatevalidator-provider</artifactId>
    <version>3.0.16.Final</version>
    <exclusions>
        <exclusion>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

尝试 2:显式包含 javax.validation v1.1.0.Final:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

Maven依赖树(尝试1):

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @     MissionPlanningService ---
[INFO] mil.army.cerdec.cpi.mcas:MissionPlanningService:war:0.0.2-SNAPSHOT
[INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.16.Final:compile
[INFO] |  +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.0.Final:compile
[INFO] |  +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] |  +- javax.activation:activation:jar:1.1.1:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.3.6:compile
[INFO] |  |  +- org.apache.httpcomponents:httpcore:jar:4.3.3:compile
[INFO] |  |  +- commons-logging:commons-logging:jar:1.1.3:compile
[INFO] |  |  \- commons-codec:commons-codec:jar:1.6:compile
[INFO] |  +- commons-io:commons-io:jar:2.1:compile
[INFO] |  +- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] |  \- org.jboss.logging:jboss-logging:jar:3.1.4.GA:compile
[INFO] +- org.jboss.resteasy:resteasy-hibernatevalidator-provider:jar:3.0.16.Final:compile
[INFO] |  +- org.hibernate:hibernate-validator:jar:4.3.1.Final:compile
[INFO] |  \- org.jboss.weld.se:weld-se:jar:2.1.0.Final:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.16.Final:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:compile
[INFO] |  \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.6.3:compile
[INFO] |     +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:compile
[INFO] |     \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:compile
[INFO] \- io.swagger:swagger-jaxrs:jar:1.5.8:compile
[INFO]    +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.4.5:compile
[INFO]    |  \- org.yaml:snakeyaml:jar:1.12:compile
[INFO]    +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.4.5:compile
[INFO]    |  \- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile
[INFO]    +- io.swagger:swagger-core:jar:1.5.8:compile
[INFO]    |  +- org.apache.commons:commons-lang3:jar:3.2.1:compile
[INFO]    |  +- org.slf4j:slf4j-api:jar:1.6.3:compile
[INFO]    |  +- com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.5:compile
[INFO]    |  |  \- joda-time:joda-time:jar:2.2:compile
[INFO]    |  +- io.swagger:swagger-models:jar:1.5.8:compile
[INFO]    |  |  \- io.swagger:swagger-annotations:jar:1.5.8:compile
[INFO]    |  \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO]    +- javax.ws.rs:jsr311-api:jar:1.1.1:compile
[INFO]    +- org.reflections:reflections:jar:0.9.10:compile
[INFO]    |  +- org.javassist:javassist:jar:3.19.0-GA:compile
[INFO]    |  \- com.google.code.findbugs:annotations:jar:2.0.1:compile
[INFO]    \- com.google.guava:guava:jar:18.0:compile

所以我的问题是:如何将Swagger与JBoss RESTEasy结合使用

P、 我对swagger/jboss/javaee还不熟悉,所以请原谅任何愚蠢的问题,并毫不犹豫地询问更多信息。不太确定我在这里应该提供什么。

共有1个答案

归浩博
2023-03-14

事实证明,JBoss EAP提供了自己版本的验证库(旧版本)。

我能够复制正确的验证. jar文件并编辑module.xml文件

$JBOSS_HOME/modules/system/layers/base/javax/validation/api/main

然后将JBoss指向正确的验证库:

...

<module xmlns="urn:jboss:module:1.1" name="javax.validation.api">
    <resources>
        <!-- OLD ONE: <resource-root path="validation-api-1.0.0.GA-redhat-3.jar"/> -->
        <!-- NEW ONE BELOW: -->
        <resource-root path="validation-api-1.1.0.Final.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="org.jboss.logging"/>
    </dependencies>
</module>
 类似资料:
  • null 问题是: 当添加以下依赖项以实现“Spring Webflux+SpringFox+JSR303”时, 我得到以下错误, 另外,如果当前不支持JSR303,那么除了JSR303之外,还可以使用哪些其他验证注释?我不想使用Swagger核心注释,只是因为它会扰乱代码的可读性。

  • 我使用的是Swagger(1.5.8),我想让我的定义检测DTO上的JSR-303注释,这样我就可以记录API的验证约束。 我希望注释(如本例)会显示关于最小值(44)的一些信息,但它不会。 由此产生的是: Swagger已经关闭了该功能的拉取请求,但我不清楚它在Swagger定义中的位置/方式。 我希望能够做这样的事情: 配置Swagger模块/插件以启用和等功能的首选方法是什么,以便他们检查我

  • 我正在利用JAXB实现一个SOAP服务的内存API网关。其中一个模式元素是“choice”,choice块中有几个元素。 我试图在客户机名称空间中镜像生成的JAXB类,因此对于这个“选择”场景,我有一个具有多个属性的bean类,其中只有一个属性是非null的。 我试图使用javax中的@NotNull注释。验证,以及验证工厂和验证程序。然而,一个“选择”的场景让这变得有点复杂。我猜这将需要一个自定

  • 我对Spring靴有疑问。如何对Spring转换器进行验证?我试图从javax使用ConstraintValidator,但它在转换器之后运行。

  • 我使用的是不可变的。org库,并希望添加Javax注释验证。但是我注意到验证没有被带到生成的类中。我认为这是不变的。org与验证注释兼容。我有spring boot starter验证和javax。验证依赖项。 不可变的 控制器: pom。xml

  • 我有一个使用javax注释的jax-rs项目(