我使用 Spring Boot 和 spring-boot-starter-jersey
,用于我的应用程序。
最初我正在研究Java 1.7 ,一切正常。
但当我转到Java 1.6 时,它开始给我错误。
Caused by: java.lang.UnsupportedClassVersionError:
org/glassfish/jersey/server/ResourceConfig : unsupported classversion 51.0
我不想使用java 1.7。我怎样才能摆脱java 1.6中的这个错误。
另外,在Spring启动网站上,我找不到合适版本的spring-boot-starter-jersey
for java 1.6
以下是我的POM
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
<properties>
<tomcat.version>7.0.59</tomcat.version>
</properties>
答案 0 :(得分:0)
Jersey 2.7及更高版本是用Java 7编译的。所以如果你想使用Java 6,你需要使用Jersey 2.6。所以你需要摆脱泽西的首发
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
所有的启动程序都会引入一堆依赖项,它不会以任何代码方式执行任何操作。因此,您真正需要做的就是用pom中的不同版本替换依赖项。如果您查看实际的pom for spring-boot-starter-jersey,就可以看到它所带来的所有内容。以下是您应该添加的修改版本,而不是spring-boot-starter-jersey
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>${jersey.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.4.4</version>
</dependency>
{jersey.version}
是2.6。
一些不同之处在于我将jersey-spring3
中的所有Spring排除在外。我这样做是因为你已经用spring-boot-starter-web
拉进了所有内容。
同样是泽西岛开始使用的jersey-media-json-jackson
,我们无法使用它,除非您想要使用Jackson 1.9。因此,我们只需引入杰出的杰克逊提供者jackson-jaxrs-json-provider
。我们使用的版本与Spring Boot bom中的Jackson版本相同。
您需要做的唯一其他事情是配置杰克逊对泽西岛的支持,其中包括注册提供商。您可以使用以下功能。
import com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper;
import com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
public class JacksonFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
context.register(JsonParseExceptionMapper.class);
context.register(JsonMappingExceptionMapper.class);
context.register(JacksonJaxbJsonProvider.class,
MessageBodyReader.class, MessageBodyWriter.class);
return true;
}
}
只需使用ResourceConfig
... register(JacksonFeature.class)
注册即可。
确实如此,一切都应该仍然有效。自动配置仍然应该是机智的。我测试了它,不是严格的,但适用于简单的启动。
或者正如@Andy Wilkinson所说,你可以保留spring-boot-starter-jersey
,并在你的pom中设置属性<jersey.version>2.6</jersey.version>
。但是如果你想使用Jackson 2,只要排除jersey-media-json-jackson
(因为Jersey 2.6使用Jackson 1.9.3),并且只包括上面提到的jackson-jaxrs-json-provider
,并按照其余的说明进行配置它