[java] map과 gson 이용한 json 객체 반환 방법

 

Map을 이용한 json 객체 반환

@ResponseBody
@RequestMapping(value = "/jsondata")
public LinkedHashMap<String, Object> getJson(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {

    LinkedHashMap<String, Object> resultMap = new LinkedHashMap<String, Object>();

    resultMap.put("title", "인포메이크");
    resultMap.put("link", "https://letsplaycoding.tistory.com");
    resultMap.put("description", "티스토리 블로그");

    ArrayList<HashMap<String, Object>> itemArray = new ArrayList<HashMap<String, Object>>();

    for (int j = 1; j < 6; j++) {
        LinkedHashMap<String, Object> article = new LinkedHashMap<String, Object>();
        article.put("nid", j);
        article.put("title", "제목"+j);
        article.put("contents", "내용"+j);
        itemArray.add(article);
    }
    resultMap.put("items",itemArray);

    return resultMap;
}

메서드에서 @ResponseBody를 사용해 리턴을 하면 MessageConverter에서 변환되어 HTTP Response Body에 쓰인다.

메서드에서는 데이터 타입에 따라 MessageConverter가 결정이 되는데 map의 형태로 반환할 경우 스프링은 자동으로 JSON 타입으로 반환해서 전달해 준다.

 

 

Gson을 이용한 json 객체 반환

   @ResponseBody
    @RequestMapping(value = "/jsondataGson")
    public void jsondataGson(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {

        response.setHeader("content-type", "application/json");
        response.setCharacterEncoding("utf-8");

        LinkedHashMap<String, Object> resultMap = new LinkedHashMap<String, Object>();

        resultMap.put("title", "인포메이크");
        resultMap.put("link", "https://letsplaycoding.tistory.com");
        resultMap.put("description", "티스토리 블로그");

        ArrayList<HashMap<String, Object>> itemArray = new ArrayList<HashMap<String, Object>>();

        for (int j = 1; j < 6; j++) {
            LinkedHashMap<String, Object> article = new LinkedHashMap<String, Object>();
            article.put("nid", j);
            article.put("title", "제목"+j);
            article.put("contents", "내용"+j);
            itemArray.add(article);
        }
        resultMap.put("items",itemArray);

        Gson gson = new Gson();
        response.getWriter().write(gson.toJson(resultMap));
    }

}

 

맵을 선언하고 맵에 프로퍼티와 값을 넣어서 데이터를 만든다.

Gson의 toJon 메서드를 이용해 맵을 JSON Object의 형태로 바꿔준다.

 

들여 쓰기가 포함된 json 객체 반환

Gson gson = new GsonBuilder().setPrettyPrinting().create();
response.getWriter().write(gson.toJson(resultMap));

들여쓰기가 추가된 json의 형태를 원한다면 gsonBuilder의 setPrettyPrinting()를 이용하면 쉽게 데이터를 만들 수 있다.

 

 

JSON 검사 PiliApp

만들어진 json 데이터는 잘못된 구조가 아닌지, 들어가서는 안될 데이터는 없는지 검증이 필요하다.

PiliApp사이트에 가면 json 데이터의 디버깅은 물론 빈 공간, 들여 쓰기, 줄 바꿈을 제거해 보여준다.