Джексон - заполнить вложенный идентификатор родителя - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующий 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",

Чтобы заполнить дочерний идентификатор родительским идентификатором, я делаю следующее:

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

Но как мне заполнить следующий дочерний идентификатор с родительским идентификатором, учитывая, что я не знаю, где находится конец этих вложенных объектов?

РЕДАКТИРОВАТЬ: Как я могу вызвать метод accept рекурсивно для заполнения следующего объекта?

1 Ответ

0 голосов
/ 23 апреля 2020

Мне нужно было создать метод для рекурсивного вызова, чтобы заполнить следующий дочерний объект родительским идентификатором:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...