view단으로 json데이터 보내기

Jay·2023년 10월 20일

work

목록 보기
15/16
post-thumbnail

기존 코드에 controller에서 json형태로 데이터를 보내는 부분이 있었는데, 이때 modelAndView로 데이터를 저장하고 있었다.
ModelAndView mv = new ModelAndView("jsonView")식으로 적치하고 있었는데 이 jsonView가 어디서 오나 봤더니 jackson을 이용해서 jsonView를 bean으로 등록했기 때문에 사용할 수 있는 것이더라.
나는 @Configuation을 붙인 class도 딱히 없고해서 다른 방법이 없을까 하다가 Gson 라이브러리를 이용하는 방법이 있다는 것을 알게되었다.

Gson 라이브러리 적용

maven dependency에 등록

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
  <dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
  </dependency>

이렇게 dependency를 등록한다.
이 포스팅에서 참고함

List형태로 받은 데이터 json으로 만들기

mapper에서 얻은 데이터를 List<VO>형태로 받고 있는데, 나는 이 데이터를 클라이언트로 넘겨주어야 했기 때문에 List -> JSON작업이 필요했다.
이를 위해서 JSON OBJECT에 JSON화한 LIST를 적치해야했음.
클라이언트에서 ajax를 사용할 때 dataSrc가 "result"로 되어있기 때문에(키값 설정) JSON형태도 {"result" : { List형 데이터 }}로 넘겨주어야 했다.

JsonObject 만들기

JsonObject obj = new JsonObject();로 JsonObject를 만들어준다. JsonObject라는 객체도 Gson에서 가져온 거 같음.
여기에 List데이터를 적치해야하는데, 이 List를 바로 JsonObject에 적치할 수가 없고, JsonElement 형태로 만들어줘야한다.

mapper통해 받아온 list를 json형태로 만들기

List를 JsonElement로 만들기 위한 과정:

1. List를 Json형태로 직렬화한다. (직렬화라는 말이 너무 어려운데 그렇다니까 그런줄 알게요..)
2. Json형태로 직렬화된 데이터를 JsonElement로 만든다.

1번 과정은 String jsonList = new Gson().toJson(list);와 같이 진행한다. 직렬화되는 list라는 녀석은 service-mapper를 거쳐서 VO형태의 list로 만들어진 데이터임.

2번 과정은 JsonElement elem = JsonParser.parseString(jsonList)와 같이 진행함. 원래는 JsonElement elem = new JsonParser().parse(jsonList)방식으로 가능했다고 하는데 이건 deprecated이므로 전자를 쓰는 게 낫다.

jsonObject에 json형태의 list 적치하기(키값적용)

첫번째 과정에서 만든 JsonObject를 기억하는지.
이제 여기에 JsonElement형태가 된 list를 적치할 수가 있다.
obj.add("result", elem)과 같이 담아준다. 여기서 "result"는 클라이언트 ajax에서 설정해준 dataSrc와 같다.

이렇게 담아주기까지는 이 포스팅이 아주 도움이 되었다.

클라이언트로 넘겨주기

넘겨줄 때는 Json형태 자체로 넘겨주는 게 아니라 이걸 또 string으로 만들어서 넘겨준다. 그러니까 controller에서 선언한 method도 string을 반환하도록 만든 다음, 위에서 만들어준 최종 json형태인 obj를 string화하여 return한다.
return obj.toString();이렇게.

그밖에

profile
ㄱ이 아닌 개발자가 되고 싶은 사람

0개의 댓글