Inheritance jackson jsonsubtypes字段在多级层次结构中不绑定 @JsonInclude(JsonInclude.Include.NON_NULL) @JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.PROPERTY,PROPERTY=“type”,visible=true) @JsonSubTypes({@Type(value=FieldGroupDefault.class,name=“FieldGroupDefault”), @类型(value=FieldGroupExtension.class,name=“FieldGroupExtension”)}) 公共抽象类FieldDTO{ 私有字符串id; 私有字符串类型; } 类fieldd以具有一些公共属性。 公共类FieldGroupExtension扩展了FieldGroup{ 私有ViewTypeDefinition ViewTypeDefinition; } 类FieldGroupExtension扩展了FieldGroup类。 公共抽象类FieldGroup将FieldDTO扩展为{ 私人预览; 私有列表层次结构; } 类FieldGroup将FieldDTO扩展到类。 公共类ViewTypeDefinition{ 私有字符串视图类型; 私有列表列定义列表; } 当我们将类型发送为fieldGroupExtension时,它会基于类型调用fieldGroupExtension类,但不会扩展fieldGroup类。这意味着无法识别fieldGroup类的预览、childHierarchy变量。 请求样本: { “类型”:“fieldGroupExtension”, “id”:“id_mobile”, “标签”:“+”, “预览”:{ “previewHierarchy”:[{ “类型”:“标签”, “样式”:“标签”, “标签”:“添加另一个手机号码”, “提示”:“添加另一个手机号码”, “id”:“id\u addAnotherMobile”, “可见”:真实, “isGroup”:“false” }] }, “儿童层次结构”:[{ “类型”:“actionInput”, “可编辑”:真, “样式”:“actionInput”, “contentDesc”:“添加手机号码${id\u Mobile.size()}”, “提示”:“添加手机号码${id\u Mobile.size()}”, “标签”:“添加手机号码${id\u Mobile.size()}”, “id”:“id_mobileNo”, “操作提示”:“验证”, “行动”:[{ “名称”:“删除字段” }], “url”:“验证手机号码的API”, “深度链接”:airtelapp://main", “自定义样式”:{ “iconAlignment”:“顶部”, “粘滞的”:“底部” } }], “viewTypeDefinition”:{ “视图类型”:“outletList”, “columnDefinitionList”:[{ “显示值”:“店铺地址”, “表达式”:” }, { “显示值”:“角色” }, { “显示值”:“视图” }, { “显示值”:“编辑” } ] } }
当我们如上所述发送一个请求参数时,我们会在控制器上收到一个请求,如: FieldGroupExtension(viewTypeDefinition=viewTypeDefinition(viewType=outletList,columnDefinitionList=[ColumnDefinition(displayValue=Shop\u Address,Expression=null),ColumnDefinition(displayValue=Role,Expression=id\u cpRole),ColumnDefinition(displayValue=View,Expression=null),ColumnDefinition(displayValue=Edit,Expression=null)])请参见: 它不受支持,也没有支持它的计划。不要设计您的系统,假设这将被实现 我不知道什么是“尝试了自定义JsonDeserialize,但没有成功。”意思是——自定义反序列化程序可以支持任何东西。请参见: 它不受支持,也没有支持它的计划。不要设计您的系统,假设这将被实现 我不知道什么“尝试了自定义JsonDeserialize,但没有成功。”意味着——自定义反序列化程序可以支持任何东西Inheritance jackson jsonsubtypes字段在多级层次结构中不绑定 @JsonInclude(JsonInclude.Include.NON_NULL) @JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.PROPERTY,PROPERTY=“type”,visible=true) @JsonSubTypes({@Type(value=FieldGroupDefault.class,name=“FieldGroupDefault”), @类型(value=FieldGroupExtension.class,name=“FieldGroupExtension”)}) 公共抽象类FieldDTO{ 私有字符串id; 私有字符串类型; } 类fieldd以具有一些公共属性。 公共类FieldGroupExtension扩展了FieldGroup{ 私有ViewTypeDefinition ViewTypeDefinition; } 类FieldGroupExtension扩展了FieldGroup类。 公共抽象类FieldGroup将FieldDTO扩展为{ 私人预览; 私有列表层次结构; } 类FieldGroup将FieldDTO扩展到类。 公共类ViewTypeDefinition{ 私有字符串视图类型; 私有列表列定义列表; } 当我们将类型发送为fieldGroupExtension时,它会基于类型调用fieldGroupExtension类,但不会扩展fieldGroup类。这意味着无法识别fieldGroup类的预览、childHierarchy变量。 请求样本: { “类型”:“fieldGroupExtension”, “id”:“id_mobile”, “标签”:“+”, “预览”:{ “previewHierarchy”:[{ “类型”:“标签”, “样式”:“标签”, “标签”:“添加另一个手机号码”, “提示”:“添加另一个手机号码”, “id”:“id\u addAnotherMobile”, “可见”:真实, “isGroup”:“false” }] }, “儿童层次结构”:[{ “类型”:“actionInput”, “可编辑”:真, “样式”:“actionInput”, “contentDesc”:“添加手机号码${id\u Mobile.size()}”, “提示”:“添加手机号码${id\u Mobile.size()}”, “标签”:“添加手机号码${id\u Mobile.size()}”, “id”:“id_mobileNo”, “操作提示”:“验证”, “行动”:[{ “名称”:“删除字段” }], “url”:“验证手机号码的API”, “深度链接”:airtelapp://main", “自定义样式”:{ “iconAlignment”:“顶部”, “粘滞的”:“底部” } }], “viewTypeDefinition”:{ “视图类型”:“outletList”, “columnDefinitionList”:[{ “显示值”:“店铺地址”, “表达式”:” }, { “显示值”:“角色” }, { “显示值”:“视图” }, { “显示值”:“编辑” } ] } },inheritance,jackson,Inheritance,Jackson,当我们如上所述发送一个请求参数时,我们会在控制器上收到一个请求,如: FieldGroupExtension(viewTypeDefinition=viewTypeDefinition(viewType=outletList,columnDefinitionList=[ColumnDefinition(displayValue=Shop\u Address,Expression=null),ColumnDefinition(displayValue=Role,Expression=id\u cp
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true)
@JsonSubTypes({@Type(value = FieldGroupDefault.class, name = "fieldGroupDefault"),
@Type(value = FieldGroupExtension.class, name = "fieldGroupExtension")})
public abstract class FieldDTO {
private String id;
private String type;
}
class FieldDTO have some common attributes.
public class FieldGroupExtension extends FieldGroup {
private ViewTypeDefinition viewTypeDefinition;
}
class FieldGroupExtension extends the FieldGroup class.
public abstract class FieldGroup extends FieldDTO {
private Preview preview;
private List<FieldDTO> childHierarchy;
}
class FieldGroup extends the FieldDTO class.
public class ViewTypeDefinition {
private String viewType;
private List<ColumnDefinition> columnDefinitionList;
}
when we send a type as fieldGroupExtension then it call a FieldGroupExtension class based on type but not extends the fieldGroup class.it means not recognize a preview ,childHierarchy variables of class FieldGroup.
Request Sample :
{
"type": "fieldGroupExtension",
"id": "id_mobile",
"label": "+",
"preview": {
"previewHierarchy": [{
"type": "label",
"style": "label",
"label": "Add another Mobile Number",
"hint": "Add another Mobile Number",
"id": "id_addAnotherMobile",
"visible": true,
"isGroup": "false"
}]
},
"childHierarchy": [{
"type": "actionInput",
"editable": true,
"style": "actionInput",
"contentDesc": "Add Mobile No ${id_mobile.size()}",
"hint": "Add Mobile No ${id_mobile.size()}",
"label": "Add Mobile No ${id_mobile.size()}",
"id": "id_mobileNo",
"actionHint": "Validate",
"actions": [{
"name": "delete_field"
}],
"url": "API for validate mobile number",
"deepLink": "airtelapp://main",
"customStyle": {
"iconAlignment": "top",
"stickToParent": "bottom"
}
}],
"viewTypeDefinition": {
"viewType": "outletList",
"columnDefinitionList": [{
"displayValue": "Shop_Address",
"Expression": ""
},
{
"displayValue": "Role"
},
{
"displayValue": "View"
},
{
"displayValue": "Edit"
}
]
}
}