首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomee 1.5.2 JAX-RS和Jackson 1.9.12

Tomee 1.5.2 JAX-RS和Jackson 1.9.12
EN

Stack Overflow用户
提问于 2013-07-05 11:20:41
回答 5查看 3.2K关注 0票数 5

多年来,我一直在努力让托梅1.5.2日航遥感公司与杰克逊合作。我想我已经尝试过100种方法了。

这是我最后一次尝试:

我在conf/system.properties中添加了以下内容:

代码语言:javascript
复制
openejb.cxf.jax-rs.providers = org.codehaus.jackson.jaxrs.JacksonJsonProvider, org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 

我在Tomee的lib文件夹中添加了:

  • jackson-mapper-asl-1.9.12.jar
  • jackson-core-asl-1.9.12.jar
  • jackson-jaxrs-1.9.12.jar

我在一个干净的NetBeans Maven web项目中有一个简单的JAX类。Mirc是一个有名字和汽车的POJO。

代码语言:javascript
复制
...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public Object myMeth() {
    return new Mirc("Peter", "BMW");
}

我一直收到“没有找到响应类myclass的消息体编写器”。

我错过了什么?我怎么才能让它起作用?我检查了堆叠溢出上的所有帖子,但都没有成功。

我真的很感谢你的帮助。谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-29 09:02:56

多亏了托梅的大力支持,我终于想出了怎么做的办法。So...here是的!

首先,我将解释如何在最新的Tomee 1.6 JAX-RS版本中实现这一点,它将很快作为稳定版本发布。顺便说一句,现在它还是很稳定的。

假设您有一个Maven Java 6 web应用程序项目(使用NetBeans生成一个),下面是步骤:

  1. 在pom.xml中添加Jackson依赖项
代码语言:javascript
复制
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-jaxrs</artifactId>
  <version>1.9.13</version>
</dependency>
  1. 在WEB(带有web.xml的文件夹)中创建openejb-jar.xml,其中包含:
代码语言:javascript
复制
<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>

有关此配置的更多信息,请参见12

如果使用自定义的jaxrs应用程序子类(例如@ApplicationPath ),请从@rmannibucau:中编辑这个类的限定名,而不是"jaxrs- Application“(这意味着默认的应用程序)。

  1. 创建一个没有Jackson就无法工作的JAX资源(例如:普通列表):
代码语言:javascript
复制
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"});
  }
}
  1. 部署在Tomee1.6.0 JAX版本上并在:http://localhost:8080/yourAppPath/jackson上启动应用程序本指南在NetBeans 7.4上使用1.6.0 2013.10.24版本进行了测试。

如果您想要最新的Jackson,请用以下内容替换之前的依赖项:

代码语言:javascript
复制
<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>

并修改openejb-jar.xml以包含:

代码语言:javascript
复制
cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider  

Tomee 1.5.2

对于此版本,必须为每个资源指定提供程序,而不是像1.6.0中那样在应用程序级别指定提供程序。更多信息可以找到这里

票数 9
EN

Stack Overflow用户

发布于 2013-07-23 18:14:38

您可以使用以下代码:

代码语言:javascript
复制
...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public String myMeth() {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(new Mirc("Peter", "BMW"));
}

这能解决你的问题吗?

可以使用mapper.readValue()将字符串转换为对象。

票数 1
EN

Stack Overflow用户

发布于 2014-03-01 15:41:09

我不得不补充:

代码语言:javascript
复制
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-xc</artifactId>
    <version>1.9.13</version>
</dependency>

到船舱去。我得到了

代码语言:javascript
复制
 java.lang.ClassNotFoundException: org.codehaus.jackson.xc.JaxbAnnotationIntrospector

不然的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17487701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档