json은 왜 사용할까?
JSON 의 목적은 이기종 간의 데이터 교환이다.
앱 ↔ 서버 / 자바 ↔자바스크립트
네트워크를 사용하는 데이터통신은 데이터를 byte형태로 전달하기때문에
굳이 json이 없어도 데이터 통신이 가능하지만,
우리는 누군가와 개발을 같이 하기때문에 상대방이 데이터를 알아볼 수 있도록
json 혹은 xml 처럼 공식 데이터 포맷으로 값을 주고 받아야한다.
초반에는 xml을 사용했지만 html의 대크구조로 크기가 무겁고 복잡해져
최소한의 용량으로 데이터 전송이 가능하고 가독성이 좋으며 특정언어에 종속되지 않은
Json을 사용하게 된것이다.
Spring에서 json으로 값 주고받기
spring에서 json값으로 http통신을 하고 싶을 때 값을 전달하거나 받을때
jackson 혹은 gson이라는 libarary를 통해 json으로 변환되어 보낼 수 있다.
json 지원 library
- Gson (구글에서 만든 라이브러리 - > pom.xml에 따로 추가해줘야함.)
- jackson (Spring 프레임워크에 내장)
라이브러리 사용법.
출처 : https://h-kkaemi.tistory.com/2
json이라는 것은 기본적으로 하나의 string 형태이다.
따라서 요청할 땐 객체로 되어있는 값들을 string으로 변환(직렬화)해줘야하고,
응답을 받을 땐 객체 혹은 Map형태의 객체로 역직렬화를 시켜줘야한다.
직렬화, serializing, marshal : java 객체 -> json
역직렬화, deserializing, umarshal : json -> java 객체
Jackson의 직렬화
ObjectMapper mapper = new ObjectMapper();
String jsonResult = mapper.writeValueAsString(json으로 바꾸고싶은 java객체);
Jackson의 역직렬화
String jsonInput = "json 데이터";
ObjectMapper mapper = new ObjectMapper();
Example exam = mapper.readValue(jsonInput, Example.class);
Gson의 직렬화
String jsonResult = new Gson().toJson(json으로 바꾸고싶은 java객체);
Gson의 역직렬화
String jsonInput = "json 데이터";
Example exam = new Gson().fromJson(jsonInput, Example.class);
출처 : https://www.baeldung.com/jackson-vs-gson
jackson의 장점
- 스프링프레임워크, JAX-RS(Jersey, Apache CXF, RESTEasy, Restlet) 등에서 지원. → jackson을 많이 쓰는 이유.
- 어노테이션 지원
- @JsonIgnoreProperties: 무시할 속성이나 속성 목록을 표시하는 데 사용.
- @JsonIgnore : 필드 레벨에서 무시 될 수있는 속성을 표시하는 데 사용.
- @JsonIgnoreType : 주석이 달린 형식의 모든 속성을 무시하도록 지정하는 데 사용.
- @JsonInclude : 어노테이션 속성을 제외 하는 데 사용.(getter제외)
- @JsonAutoDetect : json 매핑법칙을 변경할 수 있음.
- 출처 : https://cheese10yun.github.io/jackson-annotation-03/
Gson의 장점
- json 변환 방법이 간단하다 (toJson/fromJson.)
- 역직렬화때 java entities가 따로 필요없다.
https://www.baeldung.com/jackson-vs-gson
'TIL' 카테고리의 다른 글
DeadLock 피하기_커넥션풀 설정과 스레드 개수 (0) | 2022.09.02 |
---|---|
SSL Exception 해결하기. 500에러 (0) | 2022.08.29 |
cmd 명령어 정리 (0) | 2022.08.25 |
환경변수 설정. (0) | 2022.08.24 |
외부 API호출은 백엔드에서! (0) | 2022.08.22 |