2014-03-04 50 views
0

我使用maven,Spring,Apache CXF創建了一個webapp。CXF rest服務 - XML工作正常但不是JSON

如果我將服務設置爲生成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); 
} 

這是響應類(有吸氣劑和安裝者)

@XmlRootElement 
public class Response { 
private boolean success; 

private String methodName; 

private Object object; 
} 

ofcourse還有一個服務的實現。

使用XML,我得到很好的回答:

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

使用JSON我什麼也沒得到。

我認爲這可能是一個移民問題。

請幫我 問候,伊

編輯:

我發現了一個簡單的GET我收到500個狀態。試圖創建一個「外面的攔截器」來了解正在發生的事情,但一切似乎都沒問題。我甚至可以在消息的內容中看到我想要返回的對象。

我只使用一個簡單的GET調用。進入服務器並可以調試代碼。 我用隨機字段生成一個簡單的集合,然後代碼完成,我根本得不到任何數據。

我生成了一個簡單的項目來模擬這個問題,但我無法在這裏加載它。

+0

你能告訴你如何將您的需求?你是否正在發送一個MIME類型爲'application/json'的Accept頭。當你得到空的結果時,你確定沒有例外嗎? – helderdarocha

+0

很難說,沒有更多的信息。當您從GET獲得500響應時,是否還有任何附加的響應信息?此外,如果您向我們展示更多關於helderdarocha建議的請求,這將有所幫助。當發生這種情況時,您是否在服務器端看到任何錯誤? –

回答

0

想通了......

我需要更多的依賴關係:

<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> 

這一切......