第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Jackson將反序列化的JSON轉(zhuǎn)換為多態(tài)類型-一個完整的示例給我一個編譯錯誤

用Jackson將反序列化的JSON轉(zhuǎn)換為多態(tài)類型-一個完整的示例給我一個編譯錯誤

滄海一幻覺 2019-12-12 10:10:54
我正在嘗試瀏覽Programmer Bruce的教程,該教程應該允許多態(tài)JSON的反序列化。完整列表可以在這里找到 Programmer Bruce教程(很棒的東西)我已經(jīng)完成了前五項工作,沒有任何問題,但是我在最后一項中遇到了麻煩(示例6),這當然是我真正需要工作的部分。編譯時出現(xiàn)以下錯誤ObjectMapper類型的方法readValue(JsonParser,Class)不適用于參數(shù)(ObjectNode,Class)這是由代碼塊引起的  public Animal deserialize(        JsonParser jp, DeserializationContext ctxt)         throws IOException, JsonProcessingException    {      ObjectMapper mapper = (ObjectMapper) jp.getCodec();      ObjectNode root = (ObjectNode) mapper.readTree(jp);      Class<? extends Animal> animalClass = null;      Iterator<Entry<String, JsonNode>> elementsIterator =           root.getFields();      while (elementsIterator.hasNext())      {        Entry<String, JsonNode> element=elementsIterator.next();        String name = element.getKey();        if (registry.containsKey(name))        {          animalClass = registry.get(name);          break;        }      }      if (animalClass == null) return null;      return mapper.readValue(root, animalClass);  }  } 具體按行返回mapper.readValue(root,animalClass);之前有人遇到過這個問題嗎?如果有,有解決方案嗎?任何人都能提供的幫助,我將不勝感激。
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻1784條經(jīng)驗 獲得超2個贊

如果使用fasterxml,


可能需要這些更改


import com.fasterxml.jackson.core.JsonParser;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.core.Version;

import com.fasterxml.jackson.databind.DeserializationContext;

import com.fasterxml.jackson.databind.JsonNode;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.databind.deser.std.StdDeserializer;

import com.fasterxml.jackson.databind.module.SimpleModule;

import com.fasterxml.jackson.databind.node.ObjectNode;

在主要方法中


采用


SimpleModule module =

  new SimpleModule("PolymorphicAnimalDeserializerModule");

代替


new SimpleModule("PolymorphicAnimalDeserializerModule",

      new Version(1, 0, 0, null));

在Animal deserialize()函數(shù)中,進行以下更改


//Iterator<Entry<String, JsonNode>> elementsIterator =  root.getFields();

Iterator<Entry<String, JsonNode>> elementsIterator = root.fields();


//return mapper.readValue(root, animalClass);

return  mapper.convertValue(root, animalClass); 

這適用于fasterxml.jackson。如果它仍然抱怨類字段。字段名稱使用與json中相同的格式(帶有“ _”-下劃線)。因為這

//mapper.setPropertyNamingStrategy(new CamelCaseNamingStrategy()); 可能不受支持。


abstract class Animal

{

  public String name;

}


class Dog extends Animal

{

  public String breed;

  public String leash_color;

}


class Cat extends Animal

{

  public String favorite_toy;

}


class Bird extends Animal

{

  public String wing_span;

  public String preferred_food;

}



查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 464 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號