【问题标题】:CXF rest service - XML works fine but not JSONCXF 休息服务 - XML 工作正常,但 JSON 不行
【发布时间】:2014-03-04 11:56:42
【问题描述】:

我使用 maven、Spring、Apache CXF 创建了一个 webapp。

如果我将服务设置为生成 XML,则一切正常,我会得到结果。 如果我将服务设置为产品 JSON,则不会得到任何结果。

这是 pom 文件依赖:

    <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>2.7.9</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
</dependencies>

这是弹簧上下文文件:

<context:component-scan base-package="com.training" />

<bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>

<jaxrs:server id="jaxrsServer" address="/">
    <jaxrs:providers>
        <ref bean="jsonProvider"/>
    </jaxrs:providers>
    <jaxrs:serviceBeans>
        <ref bean="libraryServices"/>
    </jaxrs:serviceBeans>
</jaxrs:server>

这是服务

    @Path("/services")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface LibraryServices {

    @GET
    @Path("/book/{id}")
    public Response getBook(@PathParam("id") Integer bookId);
}

这是响应类(有getter和setter)

@XmlRootElement
public class Response {
private boolean success;

private String methodName;

private Object object;
}

当然也有服务的实现。

使用 XML 我得到了很好的答案:

<response>
<methodName>getBook</methodName>
<success>false</success>
 </response>

使用 JSON,我什么也得不到。

我认为这可能是配置问题。

请帮帮我 问候,伊多

编辑:

我发现在一个简单的 GET 中我收到 500 状态。试图创建一个“out 拦截器”来找出发生了什么,但一切似乎都很好。我什至可以在消息的内容中看到我想要返回的对象。

我只使用一个简单的 GET 调用。比进入服务器并可以调试代码。 我生成了一个带有随机字段的简单集合,然后代码完成,我根本没有得到任何数据。

我生成了一个模拟问题的简单项目,但无法在此处加载。

【问题讨论】:

  • 您能说明您是如何发送请求的吗?您是否正在发送 MIME 类型为 application/jsonAccept 标头。当你得到空结果时,你确定没有抛出异常吗?
  • 没有更多信息很难说。当您从 GET 获得 500 响应时,响应中是否附加了更多信息?此外,如果您向我们展示更多有关 Holderdarocha 建议的请求的信息,那将有所帮助。发生这种情况时,您是否在服务器端看到任何错误?

标签: java json spring jackson jax-rs


【解决方案1】:

想通了……

我需要更多的依赖:

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>2.7.9</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-xc</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

就是这样……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多