- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Jackson 框架提供了基于注解的方法来在序列化过程中发出类型信息。
我不想在我的父类(super class)(动物)中使用@JsonSubTypes 注释。
相反,我想告诉我的子类,即 Dog 和 Elephant,Animal 是它们的父类。
有没有在 Animal 类中不使用注释的方法。
如果是,请提供尽可能执行相同操作的示例。
以下是我正在尝试解决的案例。“测试”收到的 JSON 包含“类型”字段,如“狗”或“大象”。
我想将这两个类注册为“Animal”类的子类型,但不想在 Animal 中使用 @JsonSubTypes。
如有任何帮助,我们将不胜感激。提前致谢。
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
abstract class Animal(){
private String sound;
private String type;
//getters and setters
}
@JsonTypeName("dog")
Class Dog extends Animal(){
//some attributes.
//getters and setters
}
@JsonTypeName("elephant")
Class Elephant extends Animal(){
//some attributes.
//getters and setters
}
@Controller
public class MyController {
//REST service
@RequestMapping( value = "test")
public @ResponseBody String save(@RequestBody Animal animal){
System.out.println(animal.getClass());
return success;
}
}
最佳答案
这个答案将有助于实现您想要的,但方式略有不同。创建一个具有必要配置的单独类,并将其注册为 Animal 类的序列化/反序列化配置类,如下所示:
Configuration Class:
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@Type(value = Elephant.class, name = "cat"),
@Type(value = Dog.class, name = "dog") })
abstract class PolymorphicAnimalMixIn {
//Empty Class
}
To serialize or deserialize:
ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().addMixInAnnotations(Animal.class, PolymorphicAnimalMixIn.class);
mapper.getSerializationConfig().addMixInAnnotations(Animal.class, PolymorphicAnimalMixIn.class);
//Sample class with collections of Animal
class Zoo {
public Collection<Animal> animals;
}
//To deserialize
Animal animal = mapper.readValue("string_payload", Zoo.class);
//To serialize
Animal animal = mapper.writeValueAsString(zoo);
引用信用:example 5
关于java - 替代 Jackson @JsonSubTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24631923/
有没有办法使用 jackson 注释@JsonSubTypes来调用与类型相同的类? 解释如下: 我创建了这个具有许多子类型的大师类 @JsonTypeInfo( use = JsonTypeInfo
当使用 Jackson Datamapper 反序列化我的 yaml-config 时,配置中用于决定要创建的子类型的值将被省略,并且不会保存在创建的 java 对象中。 这是我正在尝试读取的配置..
Jackson 框架提供了基于注解的方法来在序列化过程中发出类型信息。 我不想在我的父类(super class)(动物)中使用@JsonSubTypes 注释。 相反,我想告诉我的子类,即 Dog
我的 JSON 结构: { ... "type":"post", // Type could vary "items":[] // Array of items
我有类层次结构 A <- B <- C。我不希望类 A 知道 C,所以我打算使用 A.type="B"表示它是类 B,然后是 B.type2 ="C"表示它是 C 类。 @JsonTypeInfo(u
我这样反序列化 jsons: { "type":"a", "payload" : {...} } 有效负载类型取决于类型。我的类(class): public class Sth {
我能够序列化和反序列化抽象基类注释的类层次结构 @JsonTypeInfo( use = JsonTypeInfo.Id.MINIMAL_CLASS, include = JsonTy
我有一个涉及动态 @JsonSubTypes 贡献者的系统,我正在尝试弄清楚如何重构我的代码(下面的示例)以不使用 @JsonSubTypes 注释而是动态地或在运行时提供这些值。有谁知道这是否可能?
是否可以使用@JsonTypeInfo.As.EXTERNAL_PROPERTY而无需使用@JsonSubtypes指定子类型? 用例是我想要创建公共(public)基类,它具有在其他项目中声明的不同
我想创建一个配置文件,允许我定义不同的数据生成器,每个生成器都需要不同的配置。但是,它们都共享相同的方法 generateRow,因此这些类都可以实现一个接口(interface)。我使用的是 Jac
我遵循从 SDN3 到 SDN4 的迁移路径,并遇到了此处记录的相同问题:SDN4 - Neo4j OGM - Jackson 2 答案中引用了一个补丁,并提到它将应用于 neo4j-ogm 1.1.
我正在尝试转换一些使用 Jackson 的 @JsonSubTypes 注释来管理多态性的 Java 代码。 这里是有效的 Java 代码: @JsonTypeInfo( use = Json
我试图让 REST 端点在 POST 时创建 Widget 的子类型, 这是所有Widget的基类 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include
我已经研究了实现对象类的最佳方式,继承并包含在一个对象中作为一个列表。 链接 1:How to configure Jackson to deserialize named types with de
Jackson 中使用的 @JsonTypeInfo 和 @JsonSubTypes 注释是什么? public class Lion extends Animal { private String
对于 FasterXML 的 Jackon JSON 开发人员来说,这是一个常见问题。当我使用类似的 POJO 时,我遇到过这个问题: package net.package.dogs.retriev
我是一名优秀的程序员,十分优秀!