2014-07-09 59 views
3

我已經配置這樣的JAXRS客戶端:JAXRS客戶端無法找到郵件正文作家

<jaxrs:client id="opaRestProxy" name="opaRestProxy" 
     address="${endpoint}" serviceClass="com.test.RestProxy" 
     inheritHeaders="true" threadSafe="true"> 
     <jaxrs:headers> 
      <entry key="Accept" value="application/json" /> 
      <entry key="Content-Type" value="application/json" /> 
     </jaxrs:headers> 
    </jaxrs:client> 

但是,當我發送一個請求,我得到以下異常:

Caused by: org.apache.cxf.interceptor.Fault: .No message body writer has been found for class : class com.test.RequestObject, ContentType : application/json. 
    at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:646) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
    at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:527) 
    ... 47 more 

我RestProxy類看起來像這樣:

@Component 
public interface RestProxy { 

    @POST 
    @Path("/getSomething") 
    String getSomething(RequestObject RequestObject); 
} 
+1

您是否使用了特定的JSON庫?這聽起來像你沒有配置提供商。 – Patrick

回答

6

如果您使用的是Jackson JSON庫,則需要將這些xml標籤添加到您的應用程序上下文中。

<jaxrs:providers> 
<bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 
</jaxrs:providers> 

如果您使用任何其他庫將該bean添加到providers標記中。希望有所幫助!

+0

如果您使用Jackson 2,此解決方案不起作用。我正在研究解決方案。 – Blamkin86

+2

@ Blamkin86你有沒有找到這個傑克遜2的解決方案? – user1491636

0

如果使用javax.ws.rs.client.Client費時,請註冊使用client.register(new JacksonJsonProvider());

0

這個答案指向我的方向是正確的供應商,但我不得不在兩個部分增加,使其在web.xml中工作

<init-param> 
     <param-name>jaxrs.providers</param-name> 
     <param-value> 
      org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 
      (writeXsiType=false) 
     </param-value> 
    </init-param> 

而且在客戶呼叫:

List<Object> providers = new ArrayList<>(); 
    // add custom providers if any 
    providers.add(new JacksonJaxbJsonProvider()); 
    WebClient client = WebClient.create(ENDPOINT_ADDRESS,providers); 
相關問題