将JSON对象PUT到RESTful服务器的正确方法

时间:2011-02-26 21:08:11

标签: java rest client-server

我无法正确格式化我的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) {

我做错了什么?

2 个答案:

答案 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”。