Как отправить 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());