본문 바로가기
Backend 개발자/Springboot

Springboot 객체 바인딩 Jackson ObjectMapper 그리고 Jackson Annotation Json to Object

by by 앵과장 2021. 11. 9.
반응형

안녕하세요
앵과장입니다.

어떤 포지션에 있냐에 따라서 집중하고 있는 상황이 항상 달라지긴 하는데 최근 외부 도메인을 접근해서 가져오는 행위를 할일이 많지 않았는데 오랜만에 한번 어떻게 사용하는지 아직도 이렇게 사용해도 되는건지 진행하겠습니다.

위메프 와 여기어때에서는 티켓 유가증권 상품 연동한다고 몇달동안 External 처리만 했는데.. 안하면 기억이 안나는군요



잭슨은 역시 마이클잭슨!!

Jackson ObjectMapper


Jackson의 ObjectMapper 클래스를 이해하는 것과 자바 오브젝트를 JSON으로 시리얼라이징하거나 JSON 문자열을 자바 오브젝트로 디시리얼라이징 하는 방법에 집중하여 작성되었다.
일반적인 Jackson 라이브러리에 대해 더욱 이해하고 싶다면 Jackson Tutorial 을 참고하세요

 

https://www.baeldung.com/jackson-object-mapper-tutorial

 

Dependencies

Springboot에 아래정보를 dependencies 합니다.

maven

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.0</version>
</dependency>

 

gradle

// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.0'



해당 종속성은 아래 라이브러리를 추가합니다.
jackson-annotstions-2.11.0.jar
jackson-core-2.11.0.jar
jackson-databind-2.11.0.jar

항상 최신정보를 받으시는것 추천드립니다.

 

 

Reading and Writing Using ObjectMapper

한개의 Class 에 3개의 Type 필드를 가진 java파일로
Json 문자열을 파싱해서 Object에 바인딩 하는것 까지 진행 해보도록 하겠습니다.

@gatter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Item {
    private String id;
    private String name;
    private int age;
}



Object to JSON

ObjectMapper 클래스의 writeValue 메소드를 사용하여 Java 오브젝트를 JSON으로 시리얼라이징 하는 샘플입니다.

 

@SpringBootTest
class ObjectmapperApplicationTests {

  @Test
  void objectToJson() throws IOException {
  ObjectMapper objectMapper = new ObjectMapper();

    Item item = new Item("renzo", "sunu",40);
    objectMapper.writeValue(new File("target/item.json"), item);
  }
}

테스트를 실행하기 전에 현재 workspace에서 $> mkdir target 명령어를 이용해 target이라는 폴더를 생성해주자.
테스트를 수행한 뒤 $> cat target/item.json 을 입력하면 다음과 같이 JSON 파일로 저장된 것을 확인 할 수 있을 것이다.


ObjectMapper

ObjectMapper 클래스의 writeValueAsString, writeValueAsBytes는 Java 오브젝트로 부터 JSON을 만들고 이를 문자열 혹은 Byte 배열로 반환한다.

writeValueAsString
@Test
  void writeValueAsString() throws IOException {
  ObjectMapper objectMapper = new ObjectMapper();
  Item item = new Item("renzo", "sunu", 40);
  String result = objectMapper.writeValueAsString(item);
  System.out.println(" >>>>>> "+result);
}

 

 

writeValueAsBytes
@Test
	void writeValueAsBytes() throws IOException {
		ObjectMapper objectMapper = new ObjectMapper();
		Item item = new Item("renzo", "sunu", 40);
		byte[] result = objectMapper.writeValueAsBytes(item);
		System.out.println(" byte[] >>>>>> "+result);
		System.out.println(" toString >>>>>> "+ Arrays.toString(result));
	}

 

 

JSON to Object

ObjectMapper 클래스를 사용하여 JSON 문자열을 Java 오브젝트로 변환샘플 입니다.

@Test
	@DisplayName("json to object")
	void jsonToObject() throws JsonProcessingException {
		ObjectMapper objectMapper = new ObjectMapper();
		String json = "{ \"id\" : \"renzo\", \"user\" : \"sunu\", \"age\" : 40 }";
		Item item = objectMapper.readValue(json, Item.class);
	}

 

URL 호출 
@Test
@DisplayName("json string url to object")
void test6() throws IOException {
	ObjectMapper objectMapper = new ObjectMapper();
	Item item = objectMapper.readValue(new URL("http://localhost:8080/item"), Item.class);
	
}