@Path("/hello") public class Hello { @POST @Path("{id}") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public JSONObject sayPlainTextHello(@PathParam("id")JSONObject inputJsonObj) { String input = (String) inputJsonObj.get("input"); String output="The input you sent is :"+input; JSONObject outputJsonObj = new JSONObject(); outputJsonObj.put("output", output); return outputJsonObj; } }
这是我的网络服务(我正在使用Jersey API)。但是我想不通一种方法,可以从Java Rest客户端调用此方法来发送和接收json数据。我尝试了以下方式编写客户端
ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); JSONObject inputJsonObj = new JSONObject(); inputJsonObj.put("input", "Value"); System.out.println(service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).entity(inputJsonObj).post(JSONObject.class,JSONObject.class));
但这显示了以下错误
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class java.lang.Class, and MIME media type, application/octet-stream, was not found
您对@PathParam的使用不正确。它不符合javadoc 此处记录的这些要求。我相信您只想发布JSON实体。您可以在资源方法中解决此问题,以接受JSON实体。
@Path("/hello") public class Hello { @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public JSONObject sayPlainTextHello(JSONObject inputJsonObj) throws Exception { String input = (String) inputJsonObj.get("input"); String output = "The input you sent is :" + input; JSONObject outputJsonObj = new JSONObject(); outputJsonObj.put("output", output); return outputJsonObj; } }
并且,您的客户端代码应如下所示:
ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); client.addFilter(new LoggingFilter()); WebResource service = client.resource(getBaseURI()); JSONObject inputJsonObj = new JSONObject(); inputJsonObj.put("input", "Value"); System.out.println(service.path("rest").path("hello").accept(MediaType.APPLICATION_JSON).post(JSONObject.class, inputJsonObj));