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