Java 14의 새 레코드 클래스로 기존 Pojo를 대체할 수 있는지 확인하려고 합니다. 하지만 그렇게 할 수 없습니다. 다음 오류 발생:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 인스턴스를 구성할 수 없음
com.a.a.Post
(기본 구성과 같은 생성자가 존재하지 않음): 개체 값에서 역직렬화할 수 없음(대리인 또는 속성 기반 생성자 없음)
레코드에 생성자가 없다는 오류가 발생했지만 레코드 클래스가 백그라운드에서 처리하고 관련 게터도 백그라운드에서 설정됩니다(정확히 게터가 아니라 id() title() 등). get 접두사 없이 켜짐). Spring이 아직 최신 Java 14 레코드를 채택하지 않았기 때문입니까? 조언 부탁드립니다. 감사.
Spring Boot 버전 2.2.6에서 Java 14를 사용하여 이 작업을 수행하고 있습니다.
다음은 일반적인 POJO를 사용하여 작동합니다.
PostClass
public class PostClass {
private int userId;
private int id;
private String title;
private String body;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
위의 POJO를 사용하면서 현재 작동하는 휴식 서비스를 호출하는 방법입니다.
public PostClass[] getPosts() throws URISyntaxException {
String url = "https://jsonplaceholder.typicode.com/posts";
return template.getForEntity(new URI(url), PostClass[].class).getBody();
}
그러나 대신 레코드를 사용하는 위치로 전환하면 위의 오류가 발생합니다.
새로운 레코드 클래스.
public record Post(int userId, int id, String title, String body) {
}
실패한 대신 레코드를 사용하도록 방법을 변경합니다.
public Post[] getPosts() throws URISyntaxException {
String url = "https://jsonplaceholder.typicode.com/posts";
return template.getForEntity(new URI(url), Post[].class).getBody();
}
편집하다:
레코드 Post 및 동일한 오류에 다음과 같이 생성자를 추가하려고 시도했습니다.
public record Post(int userId, int id, String title, String body) {
public Post {
}
}
또는
public record Post(int userId, int id, String title, String body) {
public Post(int userId, int id, String title, String body) {
this.userId = userId;
this.id = id;
this.title = title;
this.body = body;
}
}