Как отправить JSON обратно с JAVA?
У меня возникают проблемы с использованием сжатия Gzip и JQuery вместе. Похоже, что это может быть вызвано тем, как я отправляю ответы JSON в своих действиях Struts. Я использую следующий код для отправки моих объектов JSON.
public ActionForward get(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
JSONObject json = // Do some logic here
RequestUtils.populateWithJSON(response, json);
return null;
}
public static void populateWithJSON(HttpServletResponse response,JSONObject json) {
if(json!=null) {
response.setContentType("text/x-json;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
try {
response.getWriter().write(json.toString());
} catch (IOException e) {
throw new ApplicationException("IOException in populateWithJSON", e);
}
}
}
Есть ли лучший способ отправки JSON в веб-приложении Java?
Ответы
Ответ 1
Вместо
try {
response.getWriter().write(json.toString());
} catch (IOException e) {
throw new ApplicationException("IOException in populateWithJSON", e);
}
попробуйте это
try {
json.write(response.getWriter());
} catch (IOException e) {
throw new ApplicationException("IOException in populateWithJSON", e);
}
потому что это позволит избежать создания строки, и JSONObject будет напрямую записывать байты в объект Writer
Ответ 2
В нашем проекте мы делаем почти то же самое, за исключением того, что мы используем application/json в качестве типа содержимого.
Википедия говорит, что официальным типом интернет-медиа
Ответ 3
Лично я считаю, что использование JAX-RS - лучший способ справиться с привязкой данных, будь то XML или JSON. Jersey - хорошая реализация JAX-RS (RestEasy тоже хорош) и имеет хорошую поддержку. Таким образом, вы можете использовать реальные объекты, не нужно использовать собственные классы Json.org libs.
Ответ 4
response.getWriter() написать (json.toString());.
изменить на:
. Response.getWriter() печать (json.toString());