Как отправить JSON обратно с JAVA? - PullRequest
10 голосов
/ 02 апреля 2009

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

Ответы [ 4 ]

14 голосов
/ 02 апреля 2009

вместо

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

5 голосов
/ 02 апреля 2009

В нашем проекте мы делаем то же самое, за исключением того, что мы используем application / json в качестве типа контента.

Википедия сообщает, что официальным типом интернет-медиа для JSON является application / json .

1 голос
/ 04 июня 2009

Лично я считаю, что использование JAX-RS - лучший способ справиться с привязкой данных, будь то XML или JSON. Джерси является хорошей реализацией JAX-RS (RestEasy тоже хорош) и имеет хорошую поддержку. Таким образом, вы можете использовать реальные объекты, не нужно использовать проприетарные классы Json.org libs.

0 голосов
/ 12 апреля 2013
.

response.getWriter () * * +1001 запись (json.toString ());

изменить на: response.getWriter () печать (json.toString ());.

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