JAVA:无法在循环中返回响应

JAVA:无法在循环中返回响应,java,spring,hibernate,Java,Spring,Hibernate,我无法循环我的回答。它总是以如下方式返回我: "data": [ { "mydata1": "data 1", "mydata2": "data 2" } ], 它假定返回如下所示: "data": [ { "mydata1": "data 1", "mydata2": "data 2" }, "myda

我无法循环我的回答。它总是以如下方式返回我:

"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;
      }

请给我一些建议,因为我的大脑已经停止工作了。JAVA真的很痛苦。

您的代码实际上是在每次迭代中重新启动
returnData
列表。相反,它应该更新现有的列表。详情如下:

1) 在方法
listDetail
中输入后,启动
returnData
列表
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;
  }
私有列表返回数据;
私有void addReturnData(最终列表数据){
this.returnData.addAll(数据);
}
public void setReturnData(最终列表returnData){
this.returnData=returnData;
}
公共列表getReturnData(){
返回数据;
}
公共列表listDetail(@Valid final ListRequest ListRequest)引发MyException{
returnData=newarraylist();
对于(最终ListRequestDetail ListRequestDetail:((ListRequest)ListRequest).getData()){
addReturnData(myRepository.myDetails(listRequestDetail.getMyData1(),listRequestDetail.getMyData2());
}
返回数据;
}

所以您正在运行
listRequestDetail
对象,我假设它有三个元素

在调用
myRepository.myDetails(elem.getMyData1(),elem.getMyData2())的循环中
只要在每次迭代期间与存储库联系没有问题,就可以了。我之所以关注这一点,是因为你在问题中提到了hibernate。不过,数据会有所不同

但是你做错了什么。 得到结果后,在每次迭代后调用
setReturnData
有效地覆盖
returnData


这里需要注意的是,这段代码可能不是多线程的。如果维护
私有列表返回数据
仅为了“收集”结果,最好在
listdeail
方法中定义它并返回,以便代码能够在多线程环境中工作。

问题在于,您在每个循环中设置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;
 }
private List returnData=new ArrayList();
公共无效添加返回数据(最终列表返回数据)
{this.returnData.addAll(returnData);}
公共列表listDetail(@Valid final ListRequest ListRequest)
抛出我的异常{
对于(最终ListRequestDetail ListRequestDetail:((ListRequest)ListRequest).getData()){
addToReturnData(myRepository.myDetails(listRequestDetail.getMyData1(),listRequestDetail.getMyData2());
} 
返回数据;
}

我的上帝。。谢谢它起作用了。这么简单,我不知道为什么我想不出来。
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;
 }