Java JSON.decodeValue解码异常
我想让这段java代码正常工作:Java JSON.decodeValue解码异常,java,json,Java,Json,我想让这段java代码正常工作: RequestManager rm = Json.decodeValue(request.getBodyAsString(), RequestManager.class); 但我有一个错误: io.vertx.core.json.DecodeException:解码失败:找不到适合类型[simple type,class RequestManager]的构造函数:无法从json对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?) 在[来源:
RequestManager rm = Json.decodeValue(request.getBodyAsString(), RequestManager.class);
但我有一个错误:
io.vertx.core.json.DecodeException:解码失败:找不到适合类型[simple type,class RequestManager]的构造函数:无法从json对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)
在[来源:{“messageId”:“fsdfsdf”};行:1,列:2]
下面是我的班级代码:
public class RequestManager {
private String messageId;
private String messageContent;
public RequestManager(String messageId, String messageContent) {
this.messageId = messageId;
this.messageContent = messageContent;
}
public String getMessageId() {
return messageId;
}
public String getMessageContent() {
return messageContent;
}
}
我真的不知道为什么它不起作用,关于它的话题也很少,但它们都无关紧要
有人能帮忙吗
编辑--
我知道RequestManager类是这样的:
public class RequestManager {
private String messageId;
private String messageContent;
public RequestManager(String messageId, String messageContent) {
this.messageId = messageId;
this.messageContent = messageContent + "check";
}
public RequestManager() {
}
public String getMessageId() {
return messageId;
}
public String getMessageContent() {
return messageContent;
}
public void setMessageId(String messageId) {
this.messageId = messageId;
}
public void setMessageContent(String messageContent) {
this.messageContent = messageContent;
}
}
但是要知道,当我试图打印使用JSON.decodeValue
创建的RequestManager
对象的字段时,它会返回null。我过去已经做过了,也犯过同样的错误。我认为这是因为使用了空构造函数。
我还是不太明白
编辑--2
我再次尝试改变我的课程,现在是:
@JsonIgnoreProperties(ignoreUnknown=true)
public class RequestManager {
@JsonProperty("messageId") private String messageId;
@JsonProperty("messageContent") private String messageContent;
@JsonCreator
public RequestManager(@JsonProperty("messageId") String messageId, @JsonProperty("messageContent") String messageContent) {
this.messageId = messageId;
this.messageContent = messageContent;
System.out.println("This constructor is used.");
}
public RequestManager() {
}
public String getMessageId() {
return messageId;
}
public String getMessageContent() {
return messageContent;
}
public void setMessageId(String messageId) {
this.messageId = messageId;
}
public void setMessageContent(String messageContent) {
this.messageContent = messageContent;
}
}
这是我的主要观点:
final RequestManager rm=Json.decodeValue(“{\'messageId\':\'themessage\'”),RequestManager.class);
System.out.println(rm.getMessageContent())代码>
“{\“messageId\”:\“themessage\”}”
=JSON格式,我确信它是正确的,因为如果不是,decodeValue将返回解码异常
现在,当我打印它时,字段是“nullcheck”。这意味着构造函数使用得很好,但字段为空。我哪里做错了?这是因为您有自己的构造函数,而JSON不知道应该向其中传递哪些值
他们的GitHub页面上有文档,解释如何设置一个数据对象,您希望将其作为JSON提供给您并转换为Java
根据链接到的示例:,请注意它们如何显式提供不带参数的构造函数和公共setter方法
Whisky()
setName(String name)
setOrigin(String origin)
另一种方法是提供注释:。您可以选择如何做,如果需要,可以使用注释,或者使用bean类(getter和setter)。注释的优点是,您可以说“在转换为JSON时忽略此值”,等等。您可以更明确地使用注释。我建议你选一个,然后继续用它。随着项目的增长,一致性变得越来越重要。您可以尝试使用一个空构造函数。谢谢您的回答,我的代码就是从这个类中得到启发的,我看不到anoted类的任何用途。这是一个糟糕的例子吗?我知道我也会尝试使用注释,但我从未使用过它。