웹사이트에서는 ajax를 통해 클라이언트와 서버가 서로 요청과 응답을 합니다. JSON Object 형태로 전송한 요청 정보를 컨트롤러에서 받아 여러 가지 처리를 하고 나서 다시 응답 정보를 전송해주어야 합니다. 이때 ajax는 응답 정보를 문자열 형태밖에 받지 못하기 때문에 컨트롤러에서는 맵이나 커맨드 객체를 JSON Object 문자열로 만들어 전송을 해야 합니다. 이런 상황에서 Gson을 사용하면 여러 가지 객체를 JSON Object 문자열로 만들 수 있습니다.
pom.xml
<!-- Gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
해당 코드를 붙여 넣기 합니다.
Gson 라이브러리의 메서드로, 객체를 JSON Object 문자열로 변환하고 JSON Object를 다른 타입으로 변환할 수 있습니다.
기본 사용법
Gson gson = new Gson();
// Object를 JSON Object 문자열로 반환
gson.toJson(Object)
// JSON Object를 해당 타입으로 바꿈
gson.fromJson(jsonObject, Class);
결과
HashMap<String, Object> map = new HashMap<String, Object>();
JsonObject jsonObject = new JsonObject();
// Gson 객체 생성
Gson gson = new Gson();
// 맵을 JSON Object 문자열로 바꿈
String jsonString = gson.toJson(map);
// JSON Object를 맵으로 바꿈
gson.fromJson(jsonObject, new HashMap<String, Object>().getClass());
컨트롤러
@ResponseBody
@RequestMapping(value = "/url", method = RequestMethod.POST)
public String questLoad(QuestVO questVO, Model model) throws Exception {
List<QuestVO> questList = questService.selectQuestList(questVO);
Gson gson = new Gson();
HashMap<String, Object> map = new HashMap<String, Object>();
// key-value 형태로 맵에 저장
map.put("questList", questList);
// 맵을 JSON Object를 바꾸고 다시 문자열로 바꿈
String jsonString = gson.toJson(map);
return jsonString;
}
JSON Object를 만들려면 프로퍼티가 있어야 하기 때문에 맵을 선언 해서 프로퍼티와 값을 넣어줍니다. 그다음 toJson 메서드를 이용해 맵을 JSON Object 문자열 형태로 바꾸어줍니다.
ajax
$.ajax({
url: "/url",
type: "post",
success: function(data) {
var obj = JSON.parse(data);
/* obj = {"questList": ["questId": 1, "questTitle": "a"],
["questId": 2, "questTitle": "b"]
}
*/
console.log(obj.questList[0].questId);
// 1 출력
},
error: function(errorThrown) {
alert(errorThrown);
},
});
ajax로 요청하여 컨트롤러 메서드가 실행됩니다. 위 메서드가 반환한 jsonString은 success 콜백 함수의 파라미터인 data로 들어갑니다. 그리고 JSON.parse로 JSON Object로 변환시켜주면 해당 프로퍼티에 접근할 수 있게 됩니다.
[Spring] 스프링 프로젝트의 기본적인 작동 순서 (0) | 2020.09.30 |
---|---|
[Spring] 스프링과 마이바티스 연동하기 (0) | 2020.09.28 |
[Spring] 스프링 STS4 설치하기 (0) | 2020.09.27 |
[Spring] 스프링 이클립스와 톰캣 연동하기 (0) | 2020.09.27 |
[Spring] 스프링 @RequestBody, @ResponseBody 사용하기 (0) | 2020.09.27 |