Java JSON.decodeValue解码异常

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对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?) 在[来源:

我想让这段java代码正常工作:

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类的任何用途。这是一个糟糕的例子吗?我知道我也会尝试使用注释,但我从未使用过它。