我无法正确格式化我的PUT请求以使我的服务器识别我的客户端应用程序的PUT命令。
以下是将JSON字符串放入服务器的代码部分。
try {
URI uri = new URI("the server address goes here");
URL url = uri.toURL();
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(gson.toJson(newClient));
out.close();
} catch (Exception e) {
Logger.getLogger(CATHomeMain.class.getName()).log(Level.SEVERE, null, e);
}
这里是应该捕获PUT命令的代码
@PUT
@Consumes("text/plain")
public void postAddClient(String content, @PathParam("var1") String var1, @PathParam("var2") String var2) {
我做错了什么?
答案 0 :(得分:5)
您还需要告诉客户端它正在执行JSON的PUT。否则它将尝试POST一些未知类型的东西(详细的服务器日志可能会记录失败),这根本不是你想要的。 (省略了异常处理。)
URI uri = new URI("the server address goes here");
HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.addRequestProperty("Content-Type", "application/json");
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(gson.toJson(newClient));
out.close();
// Check here that you succeeded!
在服务器端,您希望它当然声明它为@Consumes("application/json")
,并且您可能希望该方法返回结果的表示或重定向到它(请参阅this SO question获取讨论问题)所以你的方法的结果不应该是void
,而应该是值类型或JAX-RS Response
(这是如何进行重定向)。
答案 1 :(得分:3)
可能是MIME类型。试试“application / json”。