[Spring/SpringBoot] Jackson 이용하여 Json String ↔Map 변환

pintegral·2022년 10월 7일
0

Spring/Spring Boot

목록 보기
2/8
post-thumbnail

의존성 추가


//build.gradle

runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

Map -> JSON String으로 변환


public static Object toStr(Map<String, Object> map) {
            try {
                // jackson.databind.ObjectMapper 이용하여 String으로 Serialization
                return getObjectMapper().writeValueAsString(map);
            } catch (JsonProcessingException e) {
                return null;
            }
        }

{"name":"mkyong","age":"37"} 포맷으로 변환

JSON String -> Map으로 변환


      public static Map<String, Object> toMap(String jsonStr) {
            try {
                return getObjectMapper().readValue(jsonStr, LinkedHashMap.class);
            } catch (JsonProcessingException e) {
                return null;
            }
        }

{name=mkyong, age=37} 포맷으로 변환

💻 전체 코드


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ll.exam.sb_jwt_exam.app.jwt.AppConfig;
import lombok.RequiredArgsConstructor;

import java.util.LinkedHashMap;
import java.util.Map;

@RequiredArgsConstructor
public class Utility {
    private static ObjectMapper getObjectMapper() {
        // AppConfig의 context  변수를 static으로 선언해놨기 때문에 @Autowired 어노테이션 사용불가
        // 대신 @Autowired 기능 직접 구현 -> .getBean("objectMapper")
        // 이 외의 방법) new ObjectMapper로 새로 객체 생성할 수도 있지만 싱글톤 객체로 유지하기 위해 이런 방법으로 구현
        // private final ObjectMapper objectMapper로 생성자주입하지 않는 이유? json 클래스는 static이므로 static 변수 필요
        return (ObjectMapper) AppConfig.getContext().getBean("objectMapper");
    }

    public static class json {

     
        public static Object toStr(Map<String, Object> map) {
            try {
                // jackson.databind.ObjectMapper 이용하여 String으로 Serialization
                return getObjectMapper().writeValueAsString(map);
            } catch (JsonProcessingException e) {
                return null;
            }
        }

        public static Map<String, Object> toMap(String jsonStr) {
            try {
                return getObjectMapper().readValue(jsonStr, LinkedHashMap.class);
            } catch (JsonProcessingException e) {
                return null;
            }
        }
    }
}
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {
    @Getter
    private static ApplicationContext context;

    @Autowired
    public void setContext(ApplicationContext context) {
        AppConfig.context = context;
    }
}

다른 클래스에서 사용


Utility.json.toStr(claims);

Utility.json.toMap(body);
profile
문제를 끝까지 해결하려는 집념의 개발자

0개의 댓글