- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否可以使用@JsonTypeInfo.As.EXTERNAL_PROPERTY
而无需使用@JsonSubtypes
指定子类型?
用例是我想要创建公共(public)基类,它具有在其他项目中声明的不同主体。
公共(public)基类,包含公共(public)字段和主体
public class ApiModel<T extends ApiBodyModel> {
private String modelType;
private String version;
private T body;
... getters / setters
}
抽象的 body 模型,其中有进一步共享的上下文。
@JsonTypeInfo(use = Id.NAME, include = As.EXTERNAL_PROPERTY, property = "modelType")
//@JsonTypeIdResolver(InheritanceTypeIdResolver.class)
public abstract class ApiBodyModel<T extends ApiBodyModel<T>> {
@JsonProperty
private ApiContextModel context;
public T withContext(ApiContextModel context) {
this.context = context;
return (T) this;
}
... getters / setters
}
允许我放弃使用 @JsonSubTypes
的一个解决方案是使用 Reflection 来获取抽象 ApiBodyModel
的所有子类型,详细信息请参见 https://gist.github.com/root-talis/36355f227ff5bb7a057ff7ad842d37a3 ,但它仍然需要在主体内声明类名,而不是向上一级声明。
使用 @JsonTypeInfo.As.EXTERNAL_PROPERTY
找到的示例已声明 JsonSubTypes
,但我想避免这种情况,因为抽象类将位于公共(public)项目中。
最佳答案
我通过让顶级类使用 InheritanceTypeIdResolver 解决了这个问题
公共(public)基类,包含公共(public)字段和主体
@JsonTypeInfo(use = Id.CUSTOM, property = "modelType", visible = true)
@JsonTypeIdResolver(InheritanceTypeIdResolver.class)
public abstract class ApiModel<T extends ApiBodyModel> {
private String modelType;
private String version;
public abstract T getBody();
public abstract void setBody(T body);
}
抽象的 body 模型,其中有进一步共享的上下文。
public abstract class ApiBodyModel {
private ApiContextModel context;
}
具体基类实现
public class ConcreteModel extends ApiModel<ConcreteBody> {
public static final String MODEL_TYPE = "concreteModel";
private ConcreteBody body;
public ConcreteModel(
String version,
ConcreteBody body) {
super(MODEL_TYPE, version);
this.body = body;
}
}
具体主体实现
public class ConcreteBody extends ApiBodyModel {
private String source;
public ConcreteBody(ApiContextModel context, String source) {
super(context);
this.source = source;
}
}
关于java - 使用 JsonTypeInfo.As.EXTERNAL_PROPERTY 而不指定 @JsonSubTypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959044/
当尝试将通用对象序列化/反序列化为特定类时,我遇到了以下问题: 代码: // Generic holding the payload data linked to this event @JsonTy
我正在使用 Jersey 编写 REST 服务。我有一个带有注释的抽象类 Promotion: @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 因此,当我返回一个
所以我的 JSON 看起来像这样: { "ActivityDisplayModel" : { "name" : "lunch with friends", "s
我正在尝试使用 Jackson 2.9.8 序列化/反序列化多态类型,除非我将此类类型的对象放入集合中,否则它可以正常工作,因为由于某种原因,当时没有写入类型信息。让我们考虑以下示例: @JsonIg
使用 Spring 3 和 Jackson 1.7.6,我可以序列化抽象类的实现并将类的完全限定名称输出为名为 @class 的属性。 .当我的 Spring Controller 从用 @Respo
使用这些依赖 compile "com.fasterxml.jackson.core:jackson-annotations:2.8.8" compile "org.codehaus.jackson:
我正在使用以下依赖项进行 JSON 序列化/反序列化 com.fasterxml.jackson.core jackson-databind 2.7.4 com.
我正在尝试序列化和反序列化(使用 Json 和 ObjectMapper )在基类上具有以下注释的对象的多态列表: @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, i
我正在尝试使用 Jackson 来序列化具有多态性的实体。序列化的 JSON 字符串应该包含一个附加的“type”属性,其中“groupA”或“groupB”作为值,但它没有。我的实体如下所示: @E
friend 们, Jackson 框架提供基于注释的方法来在序列化过程中发出类型信息。 我不想使用 @JsonTypeInfo 我的任何类(class)中的注释。 以上注释是否有任何替代方案。 如果
我发现 Jackson JSON Processor 库有一些奇怪的行为,我很好奇这是故意的还是错误。请看下面的代码: @JsonTypeInfo(use = Id.NAME) public clas
我正在使用 @JsonTypeInfo 指示 Jackson 在 @class 属性中查找具体类型信息。但是,有时我不想指定 @class,特别是当可以根据上下文推断出子类型时。 最好的方法是什么?
我的父类(super class)型注释为 @JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "_typeid") - 以便
我有这样的回应: { "id":"decaa828741611e58bcffeff819cdc9f", "statement":"question statement", "
我有类层次结构 A <- B <- C。我不希望类 A 知道 C,所以我打算使用 A.type="B"表示它是类 B,然后是 B.type2 ="C"表示它是 C 类。 @JsonTypeInfo(u
我的目标是使用 Jackson 将 JSON 字符串字段转换为正确的类。 我有以下类(class): public class AnimalRecord { private String id
我正在使用 JsonTypeInfo 来处理系统读入的一些 JSON 对象的多态性。系统还将这些对象提供给其他服务。在某些情况下,我想要包括类型信息的详细对象,而在其他情况下,我想要对象的准系统最小
我尝试在应用程序的客户端序列化一个对象(来自 Enum ),并使用 jackson 在另一端(服务器端)将其反序列化为同一对象。我的客户端有这个枚举: @JsonTypeInfo(use = Json
假设我有一些像这样的 JSON [ { 'type' : { 'value': 'B' } }, {
我遇到了一种情况,我需要自定义某些 JSON 的序列化/反序列化。我已将其简化为一个可读的示例。我有一个 Container 类,其中包含实现 MyInterface 的对象。在我的示例中,Class
我是一名优秀的程序员,十分优秀!