에러

[에러] cannot construct instance of `...` & resolved [java.lang.nullpointerexception]

ummchicken 2023. 1. 17. 23:08

회원가입 테스트를 하다 마주한 에러이다.

userName과 password를 보내는 api 호출 테스트를 했지만, 에러가 났다.

 

 

첫 번째 에러는 

cannot construct instance of `내 패키지 이름` 어쩌구 였다.

Resolved [org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.join.joinerror.domain.dto.UserJoinRequest]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.join.joinerror.domain.dto.UserJoinRequest` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 2, column: 3]]

 

no Creators, like default constructor, exist 이 문장이 눈에 띈다.

 

그 이유는 ObjectMapper가 내부적으로 Json을 Java로 변환할때 생기는 오류라고 한다.

출처 : https://velog.io/@readnthink/Cannot-construct-instance-of-Dto-%EC%97%90%EB%9F%AC-feat.NoArgsConstructor

 

 

 

근데 검색해보니 해결 방법은 

<해당 Dto에 @NoArgsConstructor를 붙여주어서 해결> 

즉, "기본 생성자만 만들어주면 된다"고 한다.

 

그래서 RequestDto에 @NoArgsConstructor를 추가 했더니, 

 

 

이번엔

java.lang.nullpointerexception 에러... 

 

 

진짜 미치고 환장할 노릇.

 

구글링을 해보니 java.lang.nullpointerexception 에러는 원인이 다양한 듯했다.

 

 

또 미친듯이 구글링...

 

 

이쯤되면 나의 스승은 구글인 듯하다.ㅋ

 

 

일단 나중에 나온 에러인 java.lang.nullpointerexception 말고, 

제일 처음에 나온 cannot construct instance of `...` 이걸 먼저 해결해야 할 것 같았다.

 

보통 제일 처음에 난 에러를 해결하면 그 뒤에 에러가 줄줄이 해결될 가능성이 높기 때문.

 

 

암튼 구글링을 해보니 어노테이션에 문제가 있는 것 같아서 코드를 다시 찬찬히 살펴봤다.

 

 

근데...! 

Service에 final과 @RequiredArgsConstructor를 안 붙였던 것이다..! 

아 이런 실수를 하다니..ㅠ

 

그래서 Service 파일에 추가했더니 

이번엔 다시 java.lang.nullpointerexception 에러가 떴다.

그래서 @NoArgsConstructor를 다시 추가하니 

 

드디어 성공!

 

 

api 두 번 호출하니 

중복 검사도 성공했다.

 

 

 

 

- 나의 어이없는 삽질 기록 끝 -