inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현

카카오 토큰 발급 구현 (2) - 토큰 받기

Spring Cloud OpenFeign 부터 계속 DTO쪽 에러가 발생하는데 원인을 모르겠습니다.

789

조재연

작성한 질문수 47

0

안녕하세요. 지난번에 DTO 기본생성자 에러가 발생해서 프로젝트 다시 생성해서 해보고 잘되었는데요.

브라우저에서 로그인해서 카카오토큰 받아오는것에서 또 같은 오류가 발생하더라구요.

public class KakaoTokenDto {

    @Builder @Getter
    public static class Request {
        private String grant_type;
        private String client_id;
        private String redirect_uri;
        private String code;
        private String client_secret;
    }

    @ToString
    @Builder @Getter
    public static class Response {
        private String token_type;
        private String access_token;
        private Integer expires_in;
        private String refresh_token;
        private Integer refresh_token_expires_in;
        private String scope;
    }

}

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.app.web.kakaotoken.dto.KakaoTokenDto$Response (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]

 

이번에도 기본생성자 오류문제인데요. 강사님꺼 완성본 코드를

수정해서 실행하면 잘되는데 제꺼 파일 다 지우고 강사님꺼 파일과 코드를

복사 붙여넣기 하면 또 안되고 그렇습니다. 🤔 왜 제껏만 DTO쪽에서

이런 에러가 발생하는지 잘 모르겠습니다.

web-api spring-boot JPA

답변 2

1

조재연

안녕하세요. 상세한 설명 감사합니다.

제가 깃허브 공유하려고 실습프로젝트를 옮기기 또 잘되고 그러네요.

우선 깃허브 url 공유하겠습니다. application.yml 에서 카카오 클라이언트 id, secret 이랑 loginForm client_id=

이부분만 삭제했습니다.

0

구파고

일단 올려주신 코드로 재현해보려니까 정상적으로 동작을 하고 있어서 정확한 원인 파악이 어렵네요 ㅠ

카카오에서 반환해주는 json 데이터가 이상해서 오류가 날 수도 있고, 롬복 버전이나 스프링 버전에 따라서 다를 수 있다고 합니다.

 

그래서 기준을 드리면 jackson 라이브러리로 직렬화/역직렬화를 할 때는 기본생성자는 항상 넣어주시면 될꺼 같습니다.롬복 어노테이션으로는 @NoArgsConstructor 를 붙여주시면 되시고, @Builder를 사용하면 @AllArgsConstructor @NoArgsConstructor 둘다 넣어주시면됩니다.

 

0

조재연

아 그렇군요 ㅜ 상세한 설명 감사합니다 !!

1

구파고

안녕하세요! json 데이터를 java object로 바꾸는 것을 deserialization(역직렬화) 라고 하는데 jackson 라이브러리의 ObjectMapper를 통해서 deserialization 해줍니다. 이 과정중에서 기본 생성자를 이용하여 deserialization을 해주는 것으로 보이네요.

 

@Builder 어노테이션을 붙여둔 경우에는 전체 필드를 갖는 생성자를 만들어주는데, 제가 작성한 코드에서는 정상적으로 deserialization을 해주고 있는 것으로 보이구요. 이 부분은 deserialization 과정을 좀 더 봐봐야할꺼 같아서 원인을 찾게되면 댓글로 남겨두도록 하겠습니다. 일단 해당 오류가 발생할 때 builder 어노테이션을 사용하고 있으시다면 전체 필드에 대한 생성자와 기본 생성자를 생성해주는 @AllArgsConstructor @NoArgsConstructor를 클래스쪽에 선언하고 강의를 진행해주시면 됩니다.

 

제 코드에서는 현재 재현이 되고 있지 않아서 민감한 정보들은 삭제 후 깃허브에 코드 올려서 url 전달 주시면 좀 더 봐보도록하겠습니다.

OAUTH2 질문

0

94

2

카카오토큰관련

0

79

2

auditing

0

76

1

전역에러처리질문

0

114

2

토큰 발급 관련 문의 드립니다.

0

130

2

이 흐름이 맞을까요??

0

126

2

OpenFeign을 어떤 상황에서 어떻게 사용하는지 감이 안옵니다...

0

218

2

도메인형 패키지 구조 질문

0

241

1

application.yml token 선언 시 오류

0

322

1

토큰발행시 500 INTERNAL_SERVER_ERROR

0

157

1

oauth 회원가입 시 필수 추가 정보는 어떤 식으로 받으시나요?

0

287

2

io.jsonwebtoken.security.WeakKeyException 해결방법

0

387

1

리프레시 토큰 사용 관련 문의 건

0

336

1

Xss 에서 WebConfig 오류 발생됩니다.

0

669

1

applycation.yml 의 readTimeout 이 적용이 안됩니다.

0

695

2

강사님 Swagger에 질문드립니다.

0

293

2

kakao token 발급 시 에러

0

729

2

아직 초반부분인데 질문이있습니다.

0

204

1

socialLoginApiService map 주입

0

291

1

전역 에러 처리 메시지 관리

0

608

2

안드로이드 스튜디오와 협업

0

643

2

String accessToken = authorizationHeader.split(" ")[1];은 accessToken이 맞나요?

0

312

1

SocialLoginApiServiceFactory 생성자 관련 질문입니다.

0

256

1

OAuthAttributes 클래스의 toMemberEntity의 파라미터로 memberType이 들어가야하는 이유가 궁금합니다.

0

444

2