소셜 로그인 중에 Kakao Login 이 구현하기 제일 쉽다는데 왜이렇게 자꾸 오류가 생기나 모르겠다.
지금 막 해결한 오류는 POST로 받아온 값을 ObjectMapper를 통해 자바 오브젝트로 만드는 부분이었는데 계속해서 null pointer exception과 함께 Unrecognized field 이슈가 발생했다.
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();
}
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 이라고 검색. 바로 답을 얻을 수 있었다.
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
OAuthToken oauthToken = null;
이렇게 컨트롤러에 아래 코드를 추가하는 방법
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
AccessToken 값을 받는 모델 쪽에 @JsonIgnoreProperties(ignoreUnknown = true)
애노테이션을 추가하는 방법.
<결론>
요약하면 받아오는 JSON의 내용과 Model 에서 받는 변수 내용에 차이가 있을 때 JSON이 객체로 만들어지는 과정에서 차이가 있는 부분을 인식하지 못하여 발생하는 에러인데... JSON 안에 있는 속성들은 모두 OAuthToken 클래스에 변수로 지정해둬서 어떤 부분을 인식 하지 못해서 발생한 에러인지는 알 수 없지만(빠트린 속성 없음) 해당 코드, 애노테이션 둘 다 써봤고 둘 다 잘 작동하여 이슈는 해결했다.