我正在使用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);

09-10 02:17
查看更多