我正在使用Apache CXF消耗一家公司的Restful API。我收到以下错误。
造成原因:org.apache.cxf.jaxrs.client.ClientWebApplicationException:org.apache.cxf.interceptor.Fault:。找不到类的消息正文编写者:类org.codehaus.jettison.json.JSONObject,ContentType:application / json。
这是我的代码:
public static void main(String[] args) {
try {
WebClient client = WebClient.create("https://aboti.securemanaged.com/rest/user");
client.type(MediaType.APPLICATION_JSON);
client.accept(MediaType.APPLICATION_JSON);
JSONObject obj = new JSONObject("{\"Id\":1,\"name\":\"Alice\",\"version\":\"1.0.0\"}");
System.out.println("Sending" + obj.toString());
//Response responseData = client.post(obj);
String responseData = client.post(obj, String.class);
System.out.println("Engine one started: " + responseData);
} catch (JSONException e) {
e.printStackTrace();
}
}
但是当我卷曲时,我将得到如下所示的有效JSON响应:
curl "https://aboti.securemanaged.com/rest/user" -X POST -d '{"Id":1,"name":"Alice","version":"1.0.0"}'
{"trackingId":1564,"statusCode":"registered","status":"1"}
我试图在调度程序servlet中添加默认提供程序,如下所示:
但是不知道如何配置WebClient实例以使用此默认提供程序。还是这不是问题?
<jaxrs:client id="serviceId" serviceClass="" address="https://aboti.securemanaged.com/rest/user">
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
<property name="mapper" ref="jacksonMapper" />
</bean>
</jaxrs:providers>
</jaxrs:client>
<bean id="jacksonMapper" class="org.codehaus.jackson.map.ObjectMapper"/>
<bean id="jacksonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
最佳答案
尝试这个:
List<Object> providers = new ArrayList<Object>();
providers.add(new JacksonJaxbJsonProvider());
然后在创建WebClient时,将提供程序列表添加为第二个参数:
WebClient client = WebClient.create("https://aboti.securemanaged.com/rest/user", providers);