多亏了Tomee的大力支持,我终于想出了办法。所以……来了!
我将首先解释如何在最新的Tomee 1.6 JAX-RS 版本中实现这一点,该版本很快将作为稳定版本发布。顺便说一句,即使现在它也非常稳定。
假设您有一个 Maven Java EE 6 web 应用程序项目(使用 NetBeans 生成一个),步骤如下:
1. 在 pom.xml 中添加 Jackson 依赖项
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.13</version>
</dependency>
2. 在 WEB-INF(带有 web.xml 的文件夹)中创建 openejb-jar.xml,其中包含:
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
<pojo-deployment class-name="jaxrs-application">
<properties>
cxf.jaxrs.providers = org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
</properties>
</pojo-deployment>
</openejb-jar>
有关此配置的更多信息,请参阅@rmannibucau的1和2
编辑:如果您使用自定义 jaxrs 应用程序子类(例如使用 @ApplicationPath),您将设置此类的限定名称而不是“jaxrs-application”(这意味着默认应用程序)。
3. 创建一个没有 Jackson 就无法工作的 JAX-RS 资源(例如:一个普通的列表):
import java.util.Arrays;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/jackson")
public class Resource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public Object sayHelloJson() {
return Arrays.asList(new String[]{"Peter", "pan", "Ihihi"});
}
}
4. 在 Tomee 1.6.0 JAX-RS 版本上部署并在以下位置启动应用程序:http://localhost:8080/yourAppPath/jackson
本指南在 NetBeans 7.4 上使用版本 1.6.0 2013.10.24 进行了测试。
如果您想要最新的 Jackson,请将以前的依赖项替换为以下内容:
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>
并修改 openejb-jar.xml 以包含:
cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider
Tomee 1.5.2
对于这个版本,必须为每个资源指定提供者,所以不像 1.6.0 那样在应用程序级别。更多信息可以在这里找到。