소셜로그인 고난의 연속

Lee·2021년 3월 13일
0

소셜 로그인 중에 Kakao Login 이 구현하기 제일 쉽다는데 왜이렇게 자꾸 오류가 생기나 모르겠다.

지금 막 해결한 오류는 POST로 받아온 값을 ObjectMapper를 통해 자바 오브젝트로 만드는 부분이었는데 계속해서 null pointer exception과 함께 Unrecognized field 이슈가 발생했다.

KakaoLoginController

ObjectMapper objectMapper = new ObjectMapper();
		
		OAuthToken oauthToken = null;
		try {
			oauthToken = objectMapper.readValue(response.getBody(),OAuthToken.class);
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}

OAuthToken

package com.shoppingmall.model;

import lombok.Data;

@Data
public class OAuthToken {
	
	private String access_token;
	private String token_type;
	private String refresh_token;
	private int expires_in;
	private String scope;
	private int refresh_toekn_expires_in;

}


lombok 라이브러리도 작동을 안해서 lombok.jar 파일을 설치하고 씨름 하다보니 해결 됐다. 분명 AccessToken도 정상적으로 받아오고 다른 값들도 다 정상적으로 받아오는데 계속 oauthToken이 null이라는 에러가 발생했다.
따라서 response값을 읽어와서 OAuthToken 클래스에 담아주는

objectMapper.readValue(response.getBody(),OAuthToken.class);

이 부분이 문제라고 판단하여 objectMapper.readValue null 이라고 검색. 바로 답을 얻을 수 있었다.

참고한 답변 1

ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
		OAuthToken oauthToken = null;

이렇게 컨트롤러에 아래 코드를 추가하는 방법

objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 

참고한 답변 2

AccessToken 값을 받는 모델 쪽에 @JsonIgnoreProperties(ignoreUnknown = true)
애노테이션을 추가하는 방법.

<결론>

요약하면 받아오는 JSON의 내용과 Model 에서 받는 변수 내용에 차이가 있을 때 JSON이 객체로 만들어지는 과정에서 차이가 있는 부분을 인식하지 못하여 발생하는 에러인데... JSON 안에 있는 속성들은 모두 OAuthToken 클래스에 변수로 지정해둬서 어떤 부분을 인식 하지 못해서 발생한 에러인지는 알 수 없지만(빠트린 속성 없음) 해당 코드, 애노테이션 둘 다 써봤고 둘 다 잘 작동하여 이슈는 해결했다.

profile
하고 싶은 게 너무 많습니다.

0개의 댓글