如何使用JAVA发送JSON?

时间:2009-04-02 09:03:31

标签: java json

我遇到了问题using Gzip compression and JQuery together。它似乎可能是由我在Struts Actions中发送JSON响应的方式引起的。我使用下一个代码来发送我的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);
        }                               
    }
 }

有没有更好的方法在Java Web应用程序中发送JSON?

4 个答案:

答案 0 :(得分: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对象

答案 1 :(得分:5)

在我们的项目中,除了使用application / json作为内容类型之外,我们几乎一样。

维基百科说official Internet media type for JSON is application/json

答案 2 :(得分:1)

就我个人而言,我认为使用JAX-RS是处理数据绑定的最佳方式,即XML或JSON。 Jersey是一个很好的JAX-RS实现(RestEasy也很好),并且有很好的支持。这样你就可以使用真实对象,不需要使用Json.org libs专有类。

答案 3 :(得分:0)

response.getWriter()的(json.toString());

更改为: 。response.getWriter()打印(json.toString());