【发布时间】:2016-05-03 03:54:21
【问题描述】:
我正在尝试使用 swagger 来记录我的 rest api,并且我已经取得了一些成功,但是当涉及到受限的资源参数时,我遇到了困难。我将 JBoss RESTEasy 与休眠验证器提供程序和 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 并让 swagger 包含它:
<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 和 Hibernate Validator 一起使用?
附:我是 swagger/jboss/javaee 的新手,所以请原谅任何愚蠢的问题,不要犹豫,询问更多信息。不完全确定我应该在这里提供什么。
【问题讨论】:
-
这是什么环境? Java EE 容器,例如 JBoss EAP 或 WildFly?还是 Java SE 风格、Tomcat 等?你能发布依赖图(mvn dependency:tree)吗?
-
已添加到问题中。环境是 JBoss EAP 6.4.0.GA。上述尝试 #1 的依赖关系树。
-
据我所知,尝试 #1 正在做我期望的事情,并且 swagger 包括具有正确版本的 javax.validation 库。所以我对为什么会收到 NoSuchMethodError... 感到目瞪口呆
标签: maven jakarta-ee jboss swagger hibernate-validator