이번 포스팅은, JSON 파일을, JAVA DTO 클래스로 받아오는 방법을 기록하기로했다.
[목차]
1. JSON to DTO Array
2. Object Mapper
1. JSON to DTO Array
저번 게시물(https://thalals.tistory.com/266)에서
외부 API에서 JSON 파일을 ResponseEntity<Object> 파일로 받아왔는데,
이 Object 데이터를 DTO 클래스로 변환해서 저장한다음, 내 입맛데로 변경하여 사용할 수 있다.
외부 API 데이터 받아오기
public ResponseEntity<?> getData(String url ) {
//Spring restTemplate
RestTemplate restTemplate = new RestTemplate();
HttpHeaders header = new HttpHeaders();
HttpEntity<?> entity = new HttpEntity<>(header);
UriComponents uri = UriComponentsBuilder.fromHttpUrl(url).build();
ResponseEntity<Object> resultMap = restTemplate.exchange(uri.toString(), HttpMethod.GET, entity, Object.class);
return resultMap;
}
DTO 클래스로 변환(JSON Object To DTO Arrays)
public List<DTO> ConvertDto(Object data) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //선언한 필드만 매핑
String jsonSting = objectMapper.writeValueAsString(data);
DTO Dtos[] = objectMapper.readValue(jsonSting,Event[].class);
}
이렇게 objectMapper로 JSON파일을 DTO 배열로 받아올 수 있었다..
결과는 잘 나오지만, ObjectMapper에 대해 잘 모르고 썻기 때문에, Objectmapper 라이브러리와, modelMapper와의 차이점에대해서 공부해 보고자한다.
2. Object Mapper
Jackson 라이브러리
- JAVA용 고성능 JSON 프로세서
ObjectMapper란,
- JSON 데이터를 Java 객체로 deserialization(역직렬화) 하거나 Java 객체를 JSON으로 serialization(직렬화) 할 때 사용하는 Jackson 라이브러리르의 클래스이다.
- ObjectMapper는 생성 비용이 비싸기 때문에 Bean/static으로 처리하는 것이 좋다고 합니다.
- ObjectMapper는 Thread Safe(여러 스레드로부터 동시 접근해도 프로그램 실행에 문제가 없음)하기 때문에 매번 생성할 필요가 없다고 합니다
- Objectmapper를 사용할때, 변환하고자하는 자바 클래스에 Getter, Setter가 포함되어 있어야합니다.
ObjectMapper 사용법
1) JSON을 java 객체로 변환하기
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- 이 설정을 통해 JSON의 모든 데이터를 파싱하는것이 아닌, 내가 필요로 하고, 선언한 필드 데이터들만 파싱할 수 있습니다.
- objectMapper.writeValue : JSON 파일이나 URL을 읽어 자바객체로 생성된 파일이 생성
- objectMapper.writeVlaueAsString : JSON을 파일을 자바객체로 읽어들인 문자열을 반환
- objectMapper.readValue : write로 읽은 Json파일이나 JSon String을 DTO로 변환
public List<DTO> ConvertDto(Object data) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //선언한 필드만 매핑
String jsonSting = objectMapper.writeValueAsString(data);
DTO Dtos[] = objectMapper.readValue(jsonSting,Event[].class);
}
* 참고
Objectmapper 가이드 : https://mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
obejctmapper란 : https://velog.io/@zooneon/Java-ObjectMapper%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-JSON-%ED%8C%8C%EC%8B%B1%ED%95%98%EA%B8%B0
'Spring > Spring Boot' 카테고리의 다른 글
getter setter를 사용하는 이유 (0) | 2022.02.24 |
---|---|
[Spring] AOP란 - (AOP, Spring AOP, AOP 어노테이션) (0) | 2022.01.18 |
ResponseEntity란 - 개념, 구조, 사용법, 사용하는 이유 (4) | 2022.01.16 |
[Spring] spring boot - 외부 Rest API json으로 받아오기(JAVA) (2) | 2022.01.15 |
[Spring] API 문서 자동화 2 - Sping REST Docs (0) | 2021.12.31 |