Правильный способ ВЫДЕЛИТЬ объект JSON на сервер RESTful - PullRequest
1 голос
/ 27 февраля 2011

У меня проблемы с форматированием моего запроса 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 ]

5 голосов
/ 27 февраля 2011

Вы также должны сообщить клиентской стороне, что она выполняет PUT из JSON. В противном случае он будет пытаться 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"), конечно, и вы, вероятно, хотите, чтобы метод либо возвращал представление результата, либо перенаправлял на него (см. этот вопрос SO для обсуждения вопросов) поэтому результатом вашего метода должен быть не void, а скорее тип значения или JAX-RS Response (то есть, как сделать перенаправление).

3 голосов
/ 27 февраля 2011

Вероятно, MIME-тип. Попробуйте "application / json".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...