杰克逊-填充嵌套父ID

时间:2020-04-23 14:18:03

标签: jackson deserialization

我有以下Json文件:

{
    "workflowId": "1",
    "cpoWorkflowSteps": [
        {
            "workflowStepId": "1",
            "workflowStepName": "START",
            "workflowStepDescription": "Start Step responsable to transfer file one",
            "cpoWorkflowStepControlsForWorkflowStepId": [
                {
                    "workflowStepControlId": "1",
                    "cpoWorkflowStepByWorkflowNextStepId": {
                        "workflowStepId": "2",
                        "workflowStepName": "STEP_2",
                        "workflowStepDescription": "Middle Step responsable to transfer file one",
                        "cpoWorkflowStepControlsForWorkflowStepId": [
                            {
                                "workflowStepControlId": "2",
                                "cpoWorkflowStepByWorkflowNextStepId": {
                                    "workflowStepId": "3",
                                    "workflowStepName": "STEP_3",
                                    "workflowStepDescription": "Middle Step responsable to transfer file one",
                                    "cpoWorkflowStepControlsForWorkflowStepId": [
                                        {
                                            "workflowStepControlId": "7",
                                            "cpoWorkflowStepByWorkflowNextStepId": {
                                                "workflowStepId": "6",
                                                "workflowStepName": "STEP_6",
                                                "workflowStepDescription": "End Step responsable to transfer file one",

要使用父ID填充子ID,请执行以下操作:

workflow.getCpoWorkflowSteps()
       .forEach(cpoWorkStep -> cpoWorkStep.getCpoWorkflowStepControlsForWorkflowStepId()
            .forEach(cpoStepControl -> cpoStepControl.setCpoWorkflowStepByWorkflowStepId(cpoWorkStep)));

但是考虑到我不知道嵌套对象的结尾在哪里,如何用父ID填充下一个子ID?

编辑:如何递归调用accept方法来填充下一个对象?

1 个答案:

答案 0 :(得分:0)

我需要创建一个递归调用的方法,以使用父ID填充下一个子对象:

private void setCpoWorkflowStepParentId(CpoWorkflowStep cpoWorkflowStep) {
        List<CpoWorkflowStepControl> list = cpoWorkflowStep.getCpoWorkflowStepControlsForWorkflowStepId().stream()
                .collect(Collectors.toList());
        for (CpoWorkflowStepControl cpoWorkflowStepControl : list) {
            cpoWorkflowStepControl.setCpoWorkflowStepByWorkflowStepId(cpoWorkflowStep);
            if(cpoWorkflowStepControl.getCpoWorkflowStepByWorkflowNextStepId() != null) {
                //Call recursively to populate the next CpoWorkflowStep child with the parent id
                this.setCpoWorkflowStepParentId(cpoWorkflowStepControl.getCpoWorkflowStepByWorkflowNextStepId());
            }

        }
    }

并调用此方法:

workflow.getCpoWorkflowSteps().forEach(
                    cpoWorkStep -> this.setCpoWorkflowStepParentId(cpoWorkStep));
相关问题