Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- java
- 빌드스크립트
- 자바
- Docker
- CICD
- Groovy문법
- 롬북
- Java8
- 빌드자동화도구
- 프로그래머스
- 롬복
- 서버
- 무중단배포
- 정보처리기사
- 시계열디비
- 정처기필기
- 롬복사용시주의할점
- 어노테이션
- 생성자
- 완전탐색알고리즘
- PULL방식아키텍쳐
- 알고리즘
- aws
- 정처기공부
- spring
- controller
- API
- git
- 정처기
- 정보처리기사필기
Archives
- Today
- Total
우당탕탕 개발일지
[Error] Resolved[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of 본문
Error
[Error] Resolved[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of
kyunge_ev 2022. 12. 27. 22:21게시판 만들기 중 댓글 작성 기능을 구현하고 있는데 아래와 같은 에러가 발생했다.
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of
|
cs |
어디가 문제인지 확인하기 위해 로그를 남겨보았는데,
Controller에 남긴 log 부터 아예 남겨지지 않았다.
1
2
3
4
5
6
|
@PostMapping("/{postsId}/comments")
public Response<CommentCreateResponse> createComment(@PathVariable Long postsId, @RequestBody CommentCreateRequest commentCreateRequest, Authentication authentication){
log.debug("postId : {} comment : {} userName : {}", postsId, commentCreateRequest.getComment(), authentication.getName());
CommentCreateResponse commentCreateResponse = commentService.create(postsId, commentCreateRequest.getComment(), authentication.getName());
return Response.success(commentCreateResponse);
}
|
cs |
더 정확한 에러 내용은
2023-01-03 20:33:06.647 WARN 44520 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.mutsasns.finalproject_kimmingyeong.domain.dto.comment.CommentCreateRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.mutsasns.finalproject_kimmingyeong.domain.dto.comment.CommentCreateRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 2, column: 3]]
그리고 Controller에 @RequestBody를 빼면 에러가 발생되지 않았고,
@ResquestBody를 넣어주면서 에러가 발생이 되었다.
구글링도 해보고 회고팀에 공유도 해보았는데
회고팀 한 분이 "기본 생성자가 없을 때 발생되는 에러" 인 것 같다고 하셨다.
생각 해보니 롬복을 이용해 @AllArgsConstructor를 달아뒀는데 @NoArgsConstructor는 달아 두지 않았던것...
1
2
3
4
5
6
7
8
|
import lombok.AllArgsConstructor;
import lombok.Data;
@AllArgsConstructor
@Data
public class CommentCreateRequest {
private String comment;
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
|
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class CommentCreateRequest {
private String comment;
}
|
cs |
위의 코드와 같이 @NoArgsConstructor를 붙여 주니 에러 없이 잘돌아갔다.
추가로 검색해서 찾아보니 JSON의 기본동작을 위해선 인자가 0인 기본 생성자가 필요하다고 한다.
에러 내용을 좀 더 찾아보면 JSON parser를 하는 데 역직렬화가 되지 않아 에러가 발생되는 것인데 거기서 필요한게 기본생성자 인거다.
앞으로 생성자를 한번 더 챙겨보는 습관을 가지고, JSON의 직렬화/역직렬화에 대해 좀 더 공부해보는 시간을 가져보면 좋을 것같다.