gpt4 book ai didi

java - 使用 writeValueAsString 序列化对象后 Jackson 反序列化失败

转载 作者:行者123 更新时间:2023-12-02 03:04:06 24 4
gpt4 key购买 nike

使用 com.fasterxml.jackson.databind.ObjectMapper 类(com.fasterxml.jackson.core:jackson-databind:2.9.5) 我正在尝试反序列化以下类的对象:

class MyClass {

String name;

MyClass(String name) {
this.name = name;
}
}

我当前正在执行的代码如下:

    MyClass myClass = new MyClass("test");
objectMapper.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule())
.configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

String text = objectMapper.writeValueAsString(myClass);
objectMapper.readValue(text, MyClass.class);

在最后一行失败并抛出异常:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of com.pckge.MyClass (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (String)"{"name":"test"}"; line: 1, column: 2]

我的目标是配置对象映射器,以便成功反序列化对象,而无需在 MyClass 的构造函数上使用 JsonCreator 或 JsonProperties 等注释:

  • 这可行吗?
  • 我缺少哪个配置?

非常感谢!

编辑1:@Dean 的回复解决了问题。但是我想避免也使用默认构造函数。

最佳答案

在没有默认构造函数的情况下解决此问题的正确方法是将 JsonCreator 和 JsonProperty 注释添加到类构造函数中。

class MyClass {

String name;

@JsonCreator
MyClass(@JsonProperty("name") String name) {
this.name = name;
}
...
}

关于java - 使用 writeValueAsString 序列化对象后 Jackson 反序列化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403962/

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