Sergio del Amo
Sergio del Amo

Reputation: 78096

How to send JSON back with JAVA?

I am having problems using Gzip compression and JQuery together. It seems that it may be caused by the way I am sending JSON responses in my Struts Actions. I use the next code to send my JSON objects back.

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);
        }                               
    }
 }

Is there a better way of sending JSON in a Java web application?

Upvotes: 11

Views: 48529

Answers (4)

luoruofeng
luoruofeng

Reputation: 1

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

change to: response.getWriter().print(json.toString());

Upvotes: 0

StaxMan
StaxMan

Reputation: 116502

Personally, I think using JAX-RS is the best way to deal with data binding, be that XML or JSON. Jersey is a good JAX-RS implementation (RestEasy is good too), and has good support. That way you can use real objects, no need to use Json.org libs proprietary classes.

Upvotes: 1

Prabhu R
Prabhu R

Reputation: 14222

Instead of

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

try this

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

because this will avoid creating a string and the JSONObject will directly write the bytes to the Writer object

Upvotes: 15

daanish.rumani
daanish.rumani

Reputation: 317

In our project we are doing pretty much the same except that we use application/json as the content type.

Wikipedia says that the official Internet media type for JSON is application/json.

Upvotes: 5

Related Questions