DTO를 사용해서 HTTP JSON 통신을 하던 도중
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error
에러가 발생했다.
그래서 원인을 찾아보니
@Getter
@Setter
@AllArgsConstructor
public class ChooseRequestDto {
private Long postId;
}
이런식의 DTO를 만들었는데
@AllArgsConstructor 대신에 @NoArgsConstructor 를 사용하니까 오류가 해결되었다.
@AllArgsConstructor
@AllArgsConstructor 어노테이션은 모든 필드를 인자로 받는 생성자를 생성합니다. 이 경우, 생성자를 통해 모든 필드 값을 제공해야 인스턴스를 만들 수 있습니다.
@NoArgsConstructor
@NoArgsConstructor 어노테이션은 매개변수가 없는 생성자를 생성합니다. 이 생성자는 모든 필드를 기본값으로 초기화합니다 (참조형 변수의 경우 null, 기본형 변수의 경우 0, false 등).
JSON 파싱과 생성자
Spring과 같은 웹 프레임워크에서 JSON을 Java 객체로 역직렬화할 때는 기본적으로 매개변수 없는 생성자를 사용합니다. JSON 데이터를 Java 객체로 변환하는 과정은 다음과 같습니다:
- JSON 키와 일치하는 클래스의 필드를 찾습니다.
- 매개변수 없는 생성자를 사용하여 클래스의 인스턴스를 생성합니다.
- JSON에서 읽은 값을 해당 필드에 설정합니다.
만약 @AllArgsConstructor만 있고 @NoArgsConstructor가 없는 경우, Spring은 JSON을 Java 객체로 변환할 수 있는 매개변수 없는 생성자를 찾을 수 없어 HttpMessageNotReadableException 오류를 발생시킵니다. 이 오류는 JSON 데이터를 클래스의 인스턴스로 역직렬화할 수 없음을 의미합니다.
결론 : JSON 파싱을 할때는 매개변수가 없는 생성자가 필요하다.
'스프링' 카테고리의 다른 글
multipart/form-data 로 파일과 데이터 둘 다 받기 (0) | 2024.04.17 |
---|---|
Page contents에 아무런 정보가 없는 경우 (0) | 2024.04.17 |
엔티티에 @Setter 사용에 관하여 (0) | 2024.04.17 |
자바 stream map함수란? (0) | 2024.04.16 |
타임리프와 웹소켓을 이용해서 채팅 기능 구현하기( (1) | 2024.04.12 |