Отправить сообщение об ошибке как объект JSON - PullRequest
23 голосов
/ 28 мая 2010

У меня есть два сервлета: первый сервлет похож на клиента и создает HttpURLConnection для вызова второго сервлета.

Я хотел бы отправить специальную ошибку, отформатированную как объект JSON, поэтому я вызываю метод sendError следующим образом:

response.sendError(code, "{json-object}")

Но в первом сервлете, когда я читаю ошибку методом getResponseMessage, я просто получаю стандартное HTTP-сообщение, а не мой объект json в виде строки.

Как я могу получить мою строку JSON?

1 Ответ

46 голосов
/ 28 мая 2010

Из HttpServletResponse#sendError() Javadoc :

По умолчанию сервер создает ответ, похожий на страницу ошибок сервера в формате HTML, содержащую указанное сообщение, устанавливает тип содержимого «text / html», оставляя файлы cookie и другие заголовки без изменений. Если для веб-приложения было сделано объявление об ошибке, соответствующее переданному коду состояния, оно будет возвращено в предпочтение предложенному параметру msg.

Таким образом, при таком подходе у вас нет другого выбора, кроме как самостоятельно извлечь сообщение из ответа HTML. JSoup может быть, однако, полезным в этом.

Чтобы достичь того, чего вы хотите, вам нужно установить код ошибки и написать ответ самостоятельно, например,

response.setStatus(code);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);

Вместо code вы можете, кстати, использовать для этого одну из HttpServletResponse.SC_XXX констант .

...