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 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

当我们如上所述发送一个请求参数时,我们会在控制器上收到一个请求,如:

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,但没有成功。”意味着——自定义反序列化程序可以支持任何东西

    @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"
                                }
                            ]
                        }
                    }