Spring/Spring Boot

[Spring] JSON 파일 DTO로 받아오기 - ObjectMapper

민돌v 2022. 1. 18. 14:40

이번 포스팅은, 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