2009-04-02 10 views
10

J'ai des problèmes using Gzip compression and JQuery together. Il semble que cela puisse être causé par la façon dont j'envoie des réponses JSON dans mes actions Struts. J'utilise le code suivant pour renvoyer mes objets JSON. Y a-t-il un meilleur moyen d'envoyer JSON dans une application Web Java?Comment renvoyer JSON avec 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); 
     }        
    } 
} 

+1

J'ai utilisé response.setContentType ("application/json; charset = UTF-8"); au lieu de response.setContentType ("text/x-json; charset = UTF-8"); – bentzy

Répondre

14

Au lieu de

try { 
     response.getWriter().write(json.toString()); 
} catch (IOException e) { 
     throw new ApplicationException("IOException in populateWithJSON", e); 
}   

essayer cette

try { 
     json.write(response.getWriter()); 
} catch (IOException e) { 
     throw new ApplicationException("IOException in populateWithJSON", e); 
}          

car cela évitera la création d'une chaîne et la JSONObject va écrire directement les octets à l'objet Writer

+0

Je travaille sur quelque chose de similaire, quelle bibliothèque est utilisée pour importer json.write()? – codeBarer

+0

utiliser le mappeur jackson de http://jackson.codehaus.org/ – Ram

1

Personnellement, je pense à l'aide JAX-RS est le meilleur moyen de traiter la liaison de données, que ce soit XML ou JSON. Jersey est une bonne mise en œuvre JAX-RS (RestEasy est bon aussi), et a un bon support. De cette façon, vous pouvez utiliser des objets réels, pas besoin d'utiliser les classes propriétaires de libs Json.org.

0

response.getWriter(). écrivez (json.toString());

remplacez par: response.getWriter(). imprime (json.toString());

+0

uhm, juste pour écrire quelque chose? –