JAVA: невозможно вернуть ответ в цикле - PullRequest
0 голосов
/ 06 ноября 2019

Я не могу зациклить свой ответ. Это всегда возвращает меня как:

"data": [
        {
            "mydata1": "data 1",
            "mydata2": "data 2"
        }
    ],

Предполагается, чтобы вернуться, как показано ниже:

"data": [
        {
            "mydata1": "data 1",
            "mydata2": "data 2"
        },
            "mydata1": "data 1",
            "mydata2": "data 2"
        },
            "mydata1": "data 1",
            "mydata2": "data 2"
        }
    ]

Ниже мой код:

      private List<myList> returnData;
      public List<myList> getReturnData() {
        return returnData;
      }
      public void setReturnData(final List<myList> returnData) {
        this.returnData = returnData;
      }

      public List<myList> listDetail(
        @Valid final ListRequest listRequest)
      throws MyException {
        for (final ListRequestDetail listRequestDetail : 
          ((ListRequest) listRequest).getData()) {
             setReturnData(myRepository.myDetails(
                listRequestDetail.getMyData1(),
                listRequestDetail.getMyData2()));
        } 
        return returnData;
      }

Я могу POST,захват из журнала:

 Submit price for ListRequest (data=[ListRequestDetail (myData1=1.00, myData2=2.00), ListRequestDetail (myData1=1.00, myData2=2.00), ListRequestDetail (myData1=1.00, myData2=2.00)])

Пожалуйста, совет, так как мой мозг уже перестал работать. JAVA действительно мучает.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

ТАК, что вы работаете над listRequestDetail объектом, который, я полагаю, имеет три элемента.

В цикле, который вы вызываете myRepository.myDetails(elem.getMyData1(), elem.getMyData2()), это нормально, если вы в порядке с обращением к хранилищуво время каждой итерации. Я обращаю ваше внимание на это, потому что вы упомянули спящий в этом вопросе. Хотя данные будут другими.

Но тогда вы делаете что-то не так. Когда вы получаете результат, вы вызываете setReturnData, эффективно переопределяя returnData после каждой итерации.

Примечание: этот код, вероятно, не является многопоточным. Если вы поддерживаете private List<myList> returnData; только для «сбора» результатов, вам лучше определить его внутри метода listDetail и вернуть, чтобы код мог работать в многопоточной среде.

0 голосов
/ 06 ноября 2019

Проблема в том, что вы устанавливаете returnData в каждом цикле, и он, наконец, устанавливает последние значения listRequestDetail. Поскольку вы хотите, чтобы returnData состоял из всех значений из listRequest.getData (). Вы должны добавить listRequestDetail в список returnData. Попробуйте ниже Изменения в вашем коде

private List<MyList> returnData = new ArrayList<>();

public void addToReturnData(final List<myList> returnData) 
{this.returnData.addAll(returnData);}

 public List<MyList> listDetail(@Valid final ListRequest listRequest)
 throws MyException {
     for (final ListRequestDetail listRequestDetail : ((ListRequest) listRequest).getData()) {
  addToReturnData(myRepository.myDetails(listRequestDetail.getMyData1(), listRequestDetail.getMyData2()));
     } 
     return returnData;
 }
0 голосов
/ 06 ноября 2019

Ваш код фактически заново инициирует список returnData в каждой итерации. Скорее это должно обновить существующий список. Как показано ниже:

1) Инициировать список returnData после ввода в метод listDetail.
2) Добавить новый метод addReturnData, чтобы обновить существующий список.

  private List<myList> returnData;

  private void addReturnData(final List<myList> data) {
    this.returnData.addAll(data);
  }

  public void setReturnData(final List<myList> returnData) {
    this.returnData = returnData;
  }

  public List<myList> getReturnData() {
    return returnData;
  }

  public List<myList> listDetail(@Valid final ListRequest listRequest) throws MyException {

    returnData = new ArrayList<myList>();
    for (final ListRequestDetail listRequestDetail : ((ListRequest) listRequest).getData()) {
      addReturnData(myRepository.myDetails(listRequestDetail.getMyData1(), listRequestDetail.getMyData2()));
    }
    return returnData;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...