gpt4 book ai didi

java - JSON.decodeValue 解码异常

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:54 25 4
gpt4 key购买 nike

我想让这个java代码工作:

RequestManager rm = Json.decodeValue(request.getBodyAsString(), RequestManager.class);

但是我有这个错误:

io.vertx.core.json.DecodeException: Failed to decode:No suitable constructor found for type [simple type, class RequestManager]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: {"messageId":"fsdfsdf"}; line: 1, column: 2]

这是我类(class)的代码:

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;
}
}

但是知道当我尝试打印我的 RequestManager 的字段时使用 JSON.decodeValue 创建的对象它返回给我 null。我过去已经这样做过并且犯过同样的错误。我认为这是因为使用了空构造函数。我还是不太明白......

编辑--2

我再次尝试更改我的类(class),如下:

@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 格式,我确信这一点,因为如果不是 JSON 格式,decodeValue 将返回解码异常。

现在,当我打印该字段时,该字段为“nullcheck”。所以这意味着构造函数使用得很好,但字段为空。我哪里做错了?

最佳答案

您可以尝试使用一个空的构造函数。

关于java - JSON.decodeValue 解码异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34444608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com