2009-04-02 2 views
10

У меня возникли проблемы using Gzip compression and JQuery together. Похоже, что это может быть вызвано тем, как я отправляю ответы JSON в своих действиях Struts. Я использую следующий код для отправки моих объектов JSON.Как отправить JSON обратно с JAVA?

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

Я использовал response.setContentType ("application/json; charset = UTF-8"); вместо response.setContentType ("text/x-json; charset = UTF-8"); – bentzy

ответ

14

Вместо

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

+0

Я работаю над чем-то похожим, какая библиотека используется для импорта json.write()? – codeBarer

+0

использовать jsonson mapper из http://jackson.codehaus.org/ – Ram

1

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

0

response.getWriter(). написать письмо (json.toString());

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

+0

Умм, просто что-нибудь написать? –

Смежные вопросы