无法使用 org.json.simple.JSONObject 访问其余 CXF

unable to access rest CXF with org.json.simple.JSONObject

我正在尝试使用 CXF 3.1.2 创建休息服务和客户端,如下所示,

服务方法声明:

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes({"application/xml", MediaType.TEXT_PLAIN})
    @Path("/agentLogout")
    public JSONObject agentLogout(String ext) {
    JSONObject obj = new JSONObject();//org.json.simple.JSONObject
    obj.put("DN", ext);
    return obj;
    }

客户代码:

    WebClient client = WebClient.create(REST_URI); // REST_URI is configured correctly 
    client.path("agentLogout").accept(MediaType.TEXT_PLAIN);
    Response agentLogoutResponse = client.post("10245");
    System.out.println(agentLogoutResponse.readEntity(JSONObject.class));//org.json.simple.JSONObject

当我 运行 客户端代码出现以下异常时,

在服务端:

        Nov 05, 2015 3:07:08 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
    WARNING: javax.ws.rs.ClientErrorException: HTTP 406 Not Acceptable

在客户端:

    Nov 05, 2015 3:07:08 PM org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem
    SEVERE: No message body reader has been found for class org.json.simple.JSONObject, ContentType: */*
    Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class org.json.simple.JSONObject, ContentType: */*

你能在这里纠正我吗,我也可以知道在 CXF rest web 服务中使用 Json 的正确方法

你的 WS 产生 MediaType.APPLICATION_JSON :

@Produces(MediaType.APPLICATION_JSON)

并且您的客户期望 MediaType.TEXT_PLAIN :

client.accept(MediaType.TEXT_PLAIN);

这就是“HTTP 406 不可接受”的原因。

更改您的客户端以接受 JSON 或您的服务器生成文本。


此外,您不需要从您的方法中 return JSONObject。只是 return 一个模型对象。

返回 JSONObject 会使事情复杂化,因为它将 return JSONObject 的 JSON 表示不等同于 JSON 的表示JSONObject.

中包含的对象

并且您可能会收到错误消息“未找到 class org.json.simple.JSONObject 的消息正文 reader”,因为 CXF 没有知道如何在 JSON.

中表示 JSONObject

在你的情况下,你可以 return 一个 Map<String,String> 一个条目:key = "DN", value = "3254".