栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Jackson JSON对嵌套类的集合给出了异常

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jackson JSON对嵌套类的集合给出了异常

看起来非静态内部类的识别是在它们直接是其包含bean的属性的情况下完成的(

BeanDeserializerbase.java
2.6.3中的476行)。因此,中间的Collection反序列化器将超越此范围。自定义解串器可能是这里最简单的选项。

请注意,您仍然可以使用杰克逊阅读的特性

Nested
,只是实现它自己的结构,在自定义解串器 反序列化的列表时使用
Nested
的对象。

为此,请像这样注释列表:

    @JsonDeserialize(contentUsing = NestedDeserializer.class)    public List<Nested> nestedList;

然后使用自定义解串器,它将:

  1. 在调用时查找解析上下文以查找包含的

    MyClass
    实例。

  2. 封装默认的/根级别的反序列化器,

    Nested
    以委派将内容反序列化的工作。

例如:

public static final class NestedDeserializer extends StdDeserializer<MyClass.Nested>    implements ResolvableDeserializer {  private JsonDeserializer<Object> underlyingDeserializer;  public NestedDeserializer() {    super(MyClass.Nested.class);  }  @Override  public void resolve(DeserializationContext ctxt) throws JsonMappingException {    underlyingDeserializer = ctxt        .findRootValueDeserializer(ctxt.getTypeFactory().constructType(MyClass.Nested.class));  }  @Override  public Nested deserialize(JsonParser p, DeserializationContext ctxt)      throws IOException, JsonProcessingException {    JsonStreamContext ourContext = p.getParsingContext();    JsonStreamContext listContext = ourContext.getParent();    JsonStreamContext containerContext = listContext.getParent();    MyClass container = (MyClass) containerContext.getCurrentValue();    MyClass.Nested value = container.new Nested();    // note use of three-argument deserialize method to specify instance to populate    underlyingDeserializer.deserialize(p, ctxt, value);    return value;  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438667.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号