3 回答
TA贡献1845条经验 获得超8个赞
如果使用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()函数中,进行以下更改
//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;
}
添加回答
举报