我想看看是否可以用Java14中的新记录类替换现有的POJO。但不能这样做。获取以下错误:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造com.a.a.post
的实例(不存在创建器,如默认构造):无法从对象值反序列化(没有基于委托或属性的创建器)
我将在Spring Boot版本2.2.6中使用Java14完成此操作。
下面使用通常的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;
}
}
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;
}
}
编译器为记录生成构造函数和其他访问器方法。
就你的情况而言,
public final class Post extends java.lang.Record {
public Post(int, int java.lang.String, java.lang.String);
public java.lang.String toString();
public final int hashCode();
public final boolean equals(java.lang.Object);
public int userId();
public int id();
public java.lang.String title();
public java.lang.String body();
}
在这里,您可以看到没有缺省的构造函数,它需要得到Jackson。您使用的构造函数是一个紧凑的构造函数,
public Post {
}
public record Post(int userId, int id, String title, String body) {
public Post() {
this(0,0, null, null);
}
}
编辑为PSA:Jackson可以正确地序列化和反序列化2.12的记录,它已经发布了。
我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?
我的Json看起来类似于(并且它是不可修改的) 我知道这个问题已经被问了很多次了,甚至我也得到了一些帮助,例如:无法反序列化START_OBJECT令牌之外的java.util.ArrayList实例 但我还是无法克服这个错误
我试图将Kafka中的Avro消息反序列化为从Avro模式生成的POJO。我正在使用Kafkaavroderializer进行此转换。 我可以在
代码试图采用java.awt.color类使用jackson对象映射器对其进行序列化。获取生成的json字符串并将其反序列化回java.awt.color类。但是在进行反序列化时会出现以下错误。 线程"main"com.fasterxml.jackson.databind.JsonMappingException中的异常:找不到适合类型[简单类型,类java.awt.颜色]的构造函数:无法从JSO
我正在尝试将我的代码 Json 数组中的这个 元素反序列化为自定义类..但我不能: 这是类: 但是我收到此错误: com.fasterxml.jackson.databind.exc.MismatchedInputException: START_ARRAY无法从 [Source: UNKNOWN; line: -1, column: -1] at com.fasterxml.jackson.da