Jersey 2.7 及更高版本是使用 Java 7 编译的。因此,如果要使用 Java 6,则需要使用 Jersey 2.6。所以你需要摆脱泽西首发
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
启动器所做的只是拉入一堆依赖项,它不做任何代码方面的事情。所以你真正需要做的就是在你的 pom.xml 中用不同版本替换依赖项。如果您查看实际的 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 start pom 中使用的jersey-media-json-jackson,我们不能使用它,除非你想坚持使用 Jackson 1.9。因此,我们只需要引入底层的 Jackson 提供程序 jackson-jaxrs-json-provider。我们使用的版本与 Spring Boot bom 中的 Jackson 版本相同。
您唯一需要做的另一件事是配置 Jackson 对 Jersey 的支持,这仅包括注册提供程序。您可以使用以下功能。
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.xml 中设置<jersey.version>2.6</jersey.version> 属性。但如果你想使用 Jackson 2,只需排除 jersey-media-json-jackson(因为 Jersey 2.6 pulls 使用 Jackson 1.9.3),只需包含上面提到的 jackson-jaxrs-json-provider,然后按照其余说明进行配置。