无法使用 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".
我正在尝试使用 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".