gpt4 book ai didi

java - 使用 Jackson ObjectMapper 反序列化为 Pojo

转载 作者:行者123 更新时间:2023-11-30 06:46:13 25 4
gpt4 key购买 nike

我尝试使用 ObjectMapper 反序列化为 POJO,但收到错误:

No suitable constructor found for type [simple type, class LambdaResult<java.lang.Object>]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)

我的Pojo很简单

   class LambdaResult<T>  {

LambdaResult() {}

String Status
ArrayList<T> Results
}

我的反序列化代码如下

 static <T> T Deserialize(final TypeReference<T> type,
final String json) {

return new ObjectMapper().readValue(json, type)
}


LambdaResult<Object> result = Serialization.Deserialize(new TypeReference<LambdaResult<Object>>() {},jsonResult)

Json 示例:

{"status": "success", "locale": "sg", "results": [{"status": "pending"}]}

我有 C# 背景,所以我可能缺少一些东西。

谢谢

最佳答案

我建议创建和配置一个像这样的ObjectMapper(Java,抱歉不要说Groovy):

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
在这种情况下,

mapper 可能应该是与 Deserialize 方法同一类中的字段,该字段如下所示:

return mapper.readValue(json, type);

配置说明:

  1. 此 MapperFeature 告诉 Jackson 以不区分大小写的方式匹配字段名称。因此它会找到String Status,尽管它不遵循 Java Beans 命名约定。这对于您的情况来说很简洁,但在将字符串转换为小写时会带来一些性能损失。您也可以使用 @JsonProperty 注释类中的字段,并指定所需的任何 JSON 字段名称。
  2. 这告诉 Jackson 将 JSON 字段与 Java 对象字段匹配,无论字段可见性 privatepublic 等。您还可以使用 @JsonAutoDetect 并指定可见性。在这两种情况下,您都不需要定义构造函数,但如果您不希望它公开,则可以保留它。
  3. 最后一个告诉 Jackson 在遇到类中不存在的 JSON 字段时不要失败。在本例中“区域设置”

关于java - 使用 Jackson ObjectMapper 反序列化为 Pojo<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43654556/

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