使用Spring-Data-JPA进行Spring启动:每次请求时都会填充ArrayList / JSON对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Spring-Data-JPA进行Spring启动:每次请求时都会填充ArrayList / JSON对象相关的知识,希望对你有一定的参考价值。
我在SpringBoot中创建这个REST API。我使用Spring-Data-JPA将我的对象Site与mysql数据库映射。 在Controller中,我设置了一个RequestMapping Annotation来从数据库中返回Site Object列表。控制器中的此方法从服务Bean调用另一个方法(getItinerary)。我已将服务的范围设置为“原型”(最初它设置为Singleton的默认值)。
问题是每次我点击链接(localhost:8080 / getItinerary)时返回的Json都会重新填充列表以及之前返回的数据。我想在每次点击链接时返回新的网站列表。
这是我的代码:
AlternateTravelPlan.java(我的服务Bean)
package...
import...
@Service
@Scope("prototype")
public class AlternateTravelPlan {
@Autowired
TravelPlanRepo travelPlanRepo;
ArrayList<Site> siteList = new ArrayList<>;
public List<Site> getItinerary() {
//Enhance For Loop to fetch Site List from Database
for (Site site : travelPlanRepo.findAll()) {
siteList.add(site);
}
return siteList;
}
}
travel plan repo.Java
package...
import...
import java.util.List;
@Repository
public interface TravelPlanRepo extends JpaRepository<Site, Integer>{
}
itinerary controller.Java
import....
@RestController
public class ItineraryController{
@Autowired
AlternateTravelPlan alternateTravelPlan;
@Autowired
TravelPlanRepo travelPlanRepo;
@RequestMapping("/getItinerary")
public List<Site> getItinerary(){
return alternateTravelPlan.getItinerary();
}
}
我有另一个名为Site的POJO,它与数据库一起映射。我不是从这个类中提取代码,因为在这种情况下它是无关紧要的
您的问题是您的siteList变量具有全局范围,因此每次调用getItinerary()时它都会向已经拥有的集合添加新项。您应该使siteList成为getItinerary方法中本地作用域的变量,每次调用该方法时清除它,或者每次调用该方法时创建一个新实例。例如。:
package...
import...
@Service
@Scope("prototype")
public class AlternateTravelPlan {
private TravelPlanRepo travelPlanRepo;
//By autowiring constructors we avoid NPEs...
@Autowired
public AlternativeTravelPlan(TravelPlanRepo travelPlanRepo){
this.travelPlanRepo = travelPlanRepo;
}
public List<Site> getItinerary() {
List siteList = new ArrayList();
//Enhance For Loop to fetch Site List from Database
for (Site site : travelPlanRepo.findAll()) {
siteList.add(site);
}
return siteList;
}
}
以上是关于使用Spring-Data-JPA进行Spring启动:每次请求时都会填充ArrayList / JSON对象的主要内容,如果未能解决你的问题,请参考以下文章