JSON 구문 분석 오류: io.starter.topic 인스턴스를 생성할 수 없습니다.주제
Spring Boot를 배우고 있는데 데모를 했는데 POST 했을 때 오브젝트 추가 요청이 안 들어왔어요!
오류 메시지는 다음과 같습니다.
{
"timestamp": 1516897619316,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not construct instance of io.starter.topic.Topic: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of io.starter.topic.Topic: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)\n at [Source: java.io.PushbackInputStream@1ff3f09a; line: 2, column: 9]",
"path": "/topics/"
}
마이 엔티티:
public class Topic {
private String id;
private String name;
private String author;
private String desc;
public Topic(String id, String name, String author, String desc) {
this.id = id;
this.name = name;
this.author = author;
this.desc = desc;
}
//getters and setters
내 컨트롤러:
public class TopicController {
@Autowired
private TopicService topicService;
@RequestMapping(value = "/topics", method = RequestMethod.POST)
public void addTopic(@RequestBody Topic topic) {
topicService.addTopic(topic);
}
서비스:
@Service
public class TopicService {
private List<Topic> topics = new ArrayList<>(Arrays.asList(
new Topic("1", "topic1", "Martin", "T1"),
new Topic("2", "topic2", "Jessie", "T2")
));
public void addTopic(Topic topic) {
topics.add(topic);
}
}
내 아들:
{
"id": "3",
"name": "topic3",
"author": "Jessie3",
"desc": "T3"
}
도와주세요!
탈직렬화 목적Topic
에는 0자리 생성자가 있어야 합니다.
예를 들어 다음과 같습니다.
public class Topic {
private String id;
private String name;
private String author;
private String desc;
// for deserialisation
public Topic() {}
public Topic(String id, String name, String author, String desc) {
this.id = id;
this.name = name;
this.author = author;
this.desc = desc;
}
// getters and setters
}
이것은 잭슨 라이브러리의 기본 동작입니다.
생성자에 주석을 달아야 합니다.
연관된 클래스의 새 인스턴스를 인스턴스화하는 데 사용할 생성자 및 공장 메서드를 정의하는 데 사용할 수 있는 마커 주석입니다.
참고: 작성자 메서드(컨스트럭터, 공장 메서드)에 주석을 달 때 방법은 다음 중 하나여야 합니다.
- 인수에 주석을 붙이지 않은 단일 인수 생성자/팩토리 메서드: 이 경우 Jackson은 먼저 JSON을 인수 유형에 바인딩한 다음 생성자를 호출합니다.이것은 (시리얼라이제이션에 사용)과 함께 사용되는 경우가 많습니다.
- 바인딩할 속성 이름을 나타내기 위해 모든 인수에 또는 를 주석으로 붙이는 컨스트럭터/팩토리 메서드
또한 파라미터 이름을 검출할 수 있는 확장 모듈 중 하나를 사용하지 않는 한 모든 주석에서 실제 이름을 지정해야 합니다('기본값'의 경우 빈 문자열이 아님). 이는 8 이전 버전의 JDK가 바이트 코드에서 파라미터 이름을 저장하거나 가져올 수 없기 때문입니다.그러나 JDK 8(또는 Paranamer와 같은 도우미 라이브러리 또는 Scala나 Kotlin과 같은 다른 JVM 언어를 사용)에서는 이름을 지정하는 것은 옵션입니다.
다음과 같이 합니다.
@JsonCreator
public Topic(@JsonProperty("id") String id, @JsonProperty("name") String name,
@JsonProperty("author") String author, @JsonProperty("desc") String desc) {
this.id = id;
this.name = name;
this.author = author;
this.desc = desc;
}
언급URL : https://stackoverflow.com/questions/48448079/json-parse-error-can-not-construct-instance-of-io-starter-topic-topic
'programing' 카테고리의 다른 글
컴포넌트 상태를 직접 변경할 수 없는 이유는 무엇입니까? (0) | 2023.03.20 |
---|---|
각도 JS: IE 오류: 10 $digest() 반복에 도달했습니다.중단 중 (0) | 2023.03.20 |
ag-grid 대 slick-grid 대 angular-grid 중 어느 것이 더 나은가? (0) | 2023.03.20 |
TypeScript에서 여러 유형의 어레이 정의 (0) | 2023.03.20 |
Jquery Ajax POST에서 400개의 잘못된 요청 오류가 발생함 (0) | 2023.03.15 |