ObjectMapper로 제너릭으로 감싼 데이터 읽기

최준호·2023년 1월 22일
0

java

목록 보기
25/25
post-thumbnail

📗 ObjectMapper로 제너릭 감싸진 데이터 읽어오기

api를 만들다 보면

{
	"code":"SUCCESS",
	"message":"로그인 성공",
	"data":
    	{
			"access_token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNjc0MzY2NTQ5LCJyb2xlcyI6WyJVU0VSIl19.p2eyHioWuSX_oQraHNQ4ukoEXMXFeUj1hiKD1TM_v-zfowNO1BL0nSzFUuaU1LhOd0N0qMqseW0he52IxVF-PQ",
			"refresh_token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNjc2OTU1ODQ5fQ.cE1bSbMaeBZaUKBdwYf7u1KPsJ0XpszicWlWkVIQjabiPdQ_v9DUaUoj8SNNx4g2VKP_CnXVhDBokBxwhVaOjA"
        }
}

다음과 같은 데이터 형식이 있는데 data는 Object로 선언되어 있어서 일정한 규칙이 정해져 있지 않다.

그래서 데이터를 파싱함에 있어서 objectMapper의 class가 정확히 정의되지 않을 경우가 많다.

public class Response<T> {
    private ResponseCode code;
    private String message;
    private T data;
}
public class LoginMember {
    private String accessToken;
    private String refreshToken;
}

데이터의 구조를 살펴보면 다음과 같은 데이터를 Response<LoginMember>의 형태이다.

그래서 파싱하기 위해

다음과 같이 class를 가져오려고 해도 가져올 수 없다. 또한 그냥 Response.class로 선언해서 데이터를 받아올 경우 LinkedMap형태로 받아와서 맵에서 데이터를 뽑아써야한다.(귀찮으면 이렇게 해도 될지도...?)

📄 결론

Response<LoginMember> response = objectMapper.readValue(contentAsString, new TypeReference<Response<LoginMember>>() {});

하지만 이렇게 선언해주면 데이터를 이제 원하는 대로 뽑아서 사용할수 있게 된다!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글