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
해당 주소로 이전하였습니다. 감사합니다. https://ililil9482.tistory.com

0개의 댓글