当前位置: 首页 > 知识库问答 >
问题:

Tomee 1.5.2 JAX-RS和Jackson 1.9.12

洪博涛
2023-03-14

多年来,我一直试图让托米1.5.2 JAX-RS与杰克逊合作。我想我已经尝试了100种方法。
这是我的最后一次尝试:

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

openejb.cxf.jax-rs.providers = org.codehaus.jackson.jaxrs.JacksonJsonProvider, org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 


我在托米的 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-RS类。Mirc是一个有名字和车的POJO。

...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public Object myMeth() {
    return new Mirc("Peter", "BMW");
}

我一直收到“没有找到响应类myclass的消息正文编写器”。
我错过了什么?如何让它工作?我已经检查了stackoverflow上的所有帖子,但没有成功。
我真的很感激你的帮助。谢谢。

共有3个答案

颜宸
2023-03-14

我必须补充:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-xc</artifactId>
    <version>1.9.13</version>
</dependency>

去舞会。我得到了

 java.lang.ClassNotFoundException: org.codehaus.jackson.xc.JaxbAnnotationIntrospector

否则。

秦昊穹
2023-03-14

您可以使用此代码

...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()将String转换为Object

蒋乐意
2023-03-14

多亏了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. 创建一个没有杰克逊就无法工作的 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>

修改.xml以包含:

cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider  

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

 类似资料:
  • JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX

  • 我做了一个使用JAX-RS(RESTfull服务)的简单项目 我有一个JAX-RS(RESTfull service)webservice项目,它部署到JBoss6.1中。默认情况下,JBoss6.1提供了与JSON集成的resteasy。我想更改默认JSON资源的日期格式。 null 没有被调用,我仍然得到默认的JSON日期格式。 即使在pom.xml下添加以下依赖项也没有帮助: 有人知道为什么

  • 我一直漫游在互联网的深处,但我发现自己不满足于我所找到的例子到目前为止。有人能给我指点一下,或者给我演示一下,将zipkin跟踪与jaxrs客户机和amqp客户机集成在一起的一个好的起点吗? 我的场景是相当简单的,我希望这个任务是琐碎的TBH。我们有一个基于微服务的体系结构,是时候开始跟踪我们的请求了,我们有了服务间依赖关系的全局视角,以及请求的实际外观(我们有度量标准,但我想要更多!)通信是通过

  • 在使用passport和oauth2orize实现oauth2堆栈时,在这种情况下,问题具体在于使用oauth2orize jwt承载。oauth2orize jwt承载器在让一切正常运行方面非常出色,但是它标记了RSA SHA片段。 在尝试为RSA SHA加密处理做好准备时,我无法获得作为验证器验证的签名。验证似乎总是返回false。如果有人已经越过了这个障碍,那么一点帮助就太好了。 我所做的工

  • 问题内容: 我正在努力弄清Java中的一些概念: JSR:描述规格,但不包含实际的实现。例如,http://jsr311.java.net/是“ RESTful Web服务的Java™API”的“主页”。它用作JSR-311的所有实现的通用参考。 可以从http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api下载JSR-311的接口(?),但

  • 我启动应用程序,登录页面不显示。当我打开登录页面时,它就像一个文档一样被下载了。我该怎么解决呢?