我正在尝试查看是否可以用 Java 14 中的新 Record 类替换现有的 Pojos。但无法这样做。收到以下错误:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
com.a.a.Post
(没有创建者,如默认构造,存在):无法从对象值反序列化(没有基于委托或属性的创建者)
我知道错误是说记录没有构造函数,但是从我看到的记录类在后台处理它并且相关的吸气剂也在后台设置(不完全是吸气剂,而是 id() title() 等等在没有 get 前缀的情况下)。是因为 Spring 还没有采用最新的 Java 14 记录吗?请指教。谢谢。
我在 Spring Boot 版本 2.2.6 中执行此操作并使用 Java 14。
以下工作使用通常的 POJO。
邮政类
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;
}
}