我有一个像下面这样的休息网络服务。
@POST
@Path("/startProcess")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
public String startProcess(InputParams inputParams, @Context HttpServletRequest request, @Context HttpServletResponse response) {
ProjectBean projBean = new ProjectBean();
Helper.loadProjectBean(inputParams, projBean);
return "1";
}
现在我正在尝试使用以下主程序来使用它。
public static void main(String[] args) throws Exception {
StringBuffer response = new StringBuffer();
String taigaServiceUrl = "http://localhost:8181/restServer/rest/TestWebService/startProcess/";
URL url = new URL(taigaServiceUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
String userpass = "admin" + ":" + "admin";
String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
conn.setRequestProperty("Authorization", basicAuth);
InputParams inputParams = new InputParams();
inputParams.setXXX("xxxx");
inputParams.setYYYY("123456");
inputParams.setZZZZ("ZZZZ");
String json = new Gson().toJson(inputParams);
DataOutputStream os = new DataOutputStream (conn.getOutputStream());
os.write(json.getBytes());
os.flush();
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
String inputLine;
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
}
但每次我都低于错误。
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 415 for URL: http://localhost:8181/restServer/rest/TestWebService/startProcess/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at scm.controllers.Test.main(Test.java:64)
根据错误,媒体类型不受支持。在我的休息webservice中,我正在使用JSON,而在我的主程序中,我正在发送JSON。然后它在哪里破碎?
答案 0 :(得分:0)
经过大量的调试后,我找到了问题的解决方案。我需要在classpath中添加以下jar。实际上,Jersey无法将JSON对象绑定到其他服务。
jackson-annotations-2.5.4.jar
jackson-core-2.5.4.jar
jackson-databind-2.5.4.jar
jackson-jaxrs-base-2.5.4.jar
jackson-jaxrs-json-provider-2.5.4.jar
jersey-entity-filtering-2.22.2.jar
jersey-media-json-jackson-2.22.2.jar
答案 1 :(得分:-2)
查看本指南:
我认为你需要定义一个json处理器:
https://www.nabisoft.com/tutorials/java-ee/producing-and-consuming-json-or-xml-in-java-rest-services-with-jersey-and-jackson
感谢。
答案 2 :(得分:-2)
这是@Produces和@Consumes的问题。 @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.APPLICATION_JSON) 根据注释,您的端点接收JSON,结果将是TEXT。
但在您的客户端程序中,您已将内容类型称为json。 conn.setRequestProperty(“Content-Type”,“application / json”);
因此客户需要一个json,而不是。
将此更改为 conn.setRequestProperty(“Content-Type”,“text / plain”);
会起作用。