• 참조

    • 블로그: https://interconnection.tistory.com/137
  • dependency

    implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
    // LocalDateTime 파싱 이슈로 필요한 모듈 ObjectMapper 생성 시 module 불러와서 사용
    // 예시) new ObjectMapper().registerModule(new JavaTimeModule());
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3'
    
  • 기본적인 사용 예시

    • Entity

      public class User {
      	private String name;
      	private int age;
      
      	public User(String name, int age) {
      		this.name = name;
      		this.age = age;
      	}
      	
      	public String getName() {
      		return this.name;
      	}
      	
      	public int getAge() {
      		return this.age;
      	}
      }
      
    • JavaObject → JSON

      ObjectMapper objectMapper = new ObjectMapper();
      
      User user = new User("Ryan", 30);
      
      // json 파일 출력
      objectMapper.writeValue(new File("user.json"), user)
      {"name": "Ryan", "age": 30}
      // 문자열 출력
      String userAsString = objectMapper.writeValueAsString(user);
      {"name":"Ryan", "age":30}
      
    • JSON → JavaObject

      // String to Object
      String json = "{'name':'Ryan', 'age':30}";
      User user = objectMapper.readValue(json, User.class);
      
      // Json File To Object
      User user = objectMapper.readValue(new File("user.json"), User.class);
      // Json URL To Object
      User user = objectMapper.readValue(new URL("file:user.json"), User.class);
      
    • JSON → Jackson JsonNode

      String json = "{'name':'Ryan', 'age':30}";
      JsonNode jsonNode = objectMapper.readTree(json);
      
    • JSON Array String → Java List

      String jsonArr = "[{'name':'Ryan', 'age':30},{'name':'Jake','age':20}]";
      List<User> users = objectMapper.readValue(jsonArr, new TypeReference<>() {});
      
    • JSON String → Java Map

      String jsonArr = "{'name':'Ryan','age':30}";
      Map<String, Object> user = objectMapper.readValue(jsonArr, new TypeReference<>() {});
      
  • 추가적인 지원 기능

    • Serialization/Deserialization Config

      • JSON에는 있지만 Mapping될 Object에는 없는 필드를 무시해야 하는 경우

        String json = "{'name':'Ryan','age':30,'gender':'M'}";
        ObjectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        User user = objectMapper.readValue(json, User.class);
        
      • JSON에 있는 property가 Mapping될 Object에 primitive인데 null값 전달을 무시해야 하는 경우

        // 기본적으로 FAIL_ON_NULL_PRIMITIVES 옵션은 false
        // true -> age가 int인 primitive 자료형이 null인 JSON이 전달되는 경우 예외 발생
        String json = "{'name':'Ryan','age':null}";
        User user = objectMapper.readValue(json, User.class);
        
    • Custom Serializer/Deserializer

      • Custom Serializer

        Untitled

      • Custom Deserializer

        Untitled