Java 如何使用spring boot处理不同的搜索?
使用SpringDataJPA在SpringBoot中创建搜索功能的最佳实践是什么Java 如何使用spring boot处理不同的搜索?,java,spring,spring-mvc,spring-data-jpa,Java,Spring,Spring Mvc,Spring Data Jpa,使用SpringDataJPA在SpringBoot中创建搜索功能的最佳实践是什么 @GetMapping("/search") public List<Hotel> getAllByCriteria(@RequestParam MultiValueMap<String, String> criteria) { if (criteria.containsKey("cityPublicId")) { String cityPublicId = cri
@GetMapping("/search")
public List<Hotel> getAllByCriteria(@RequestParam MultiValueMap<String, String> criteria) {
if (criteria.containsKey("cityPublicId")) {
String cityPublicId = criteria.getFirst("cityPublicId");
if (criteria.containsKey("amenity")) {
List<String> amenities = criteria.get("amenity");
return svc.findAllByCityAndAmenities(cityPublicId, amenities);
}
return svc.findAllByCity(cityPublicId);
}
//currently only support one amenity filtration
else if (criteria.containsKey("amenity")) {
return svc.findAllByAmenities(criteria.get("amenity"));
}
return null;
}
@GetMapping(“/search”)
公共列表getAllByCriteria(@RequestParam多值映射条件){
if(标准containsKey(“城市公共信息”)){
字符串cityPublicId=criteria.getFirst(“cityPublicId”);
如果(标准容器(“舒适性”){
列出便利设施=标准。获取(“便利设施”);
返回svc.Findallbycityanddaminities(城市公共设施、便利设施);
}
返回svc.findAllByCity(cityPublicId);
}
//目前只支持一种便利设施过滤
否则,如果(标准。容器(“舒适性”)){
返回svc.findallbyanities(criteria.get(“便利”));
}
返回null;
}
目前我必须确定所有可能的标准组合,以使用相应的方法,是否有一种通用的方法来处理所有条件?或者至少不硬编码所有可能的组合
PS:如果我想按多个便利设施过滤结果,我可以使用findByAmenitiesContains(集合)吗?酒店实体具有一套舒适设施的地方。我必须使用@query创建自定义查询吗
谢谢。AFAIR您可以使用不同的请求有效负载实体来处理相同的端点
@GetMapping(path = "/search", params = { "cityId" })
public List<Hotel> getAllByCriteria(ByCityPublicId byCity) {
return svc.findAllByCity(byCity.getCityPublicId())
}
@GetMapping(path = "/search", params = { "cityId", "amenity" })
public List<Hotel> getAllByCriteria(ByCityPublicIdAndAmenity byCityAndAmenitities) {
return svc.findAllByCityAndAmenities(byCityAndAmenitities.getCityPublicId(), byCityAndAmenitities.getAmenitities())
}
@GetMapping(path = "/search", params = { "amenity" })
public List<Hotel> getAllByCriteria(ByAmenity byAmenity) {
return svc.findAllByAmenities(byAmenity.getAmenity());
}
@GetMapping(path=“/search”,params={“cityId”})
公共列表getAllByCriteria(按城市PublicId按城市){
返回svc.findAllByCity(byCity.getCityPublicId())
}
@GetMapping(path=“/search”,params={“cityId”,“便利设施”})
公共列表getAllByCriteria(按城市公共性按城市数据){
返回svc.findAllByCityAndAmenities(bycityandamenities.getCityPublicId(),bycityandamenities.getamenities())
}
@GetMapping(path=“/search”,params={“便利性”})
公共列表getAllByCriteria(ByAmency ByAmency){
返回svc.findallbymenity(byAmenity.getAmenity());
}
AFAIR您可以使用不同的请求有效负载实体来处理相同的端点
@GetMapping(path = "/search", params = { "cityId" })
public List<Hotel> getAllByCriteria(ByCityPublicId byCity) {
return svc.findAllByCity(byCity.getCityPublicId())
}
@GetMapping(path = "/search", params = { "cityId", "amenity" })
public List<Hotel> getAllByCriteria(ByCityPublicIdAndAmenity byCityAndAmenitities) {
return svc.findAllByCityAndAmenities(byCityAndAmenitities.getCityPublicId(), byCityAndAmenitities.getAmenitities())
}
@GetMapping(path = "/search", params = { "amenity" })
public List<Hotel> getAllByCriteria(ByAmenity byAmenity) {
return svc.findAllByAmenities(byAmenity.getAmenity());
}
@GetMapping(path=“/search”,params={“cityId”})
公共列表getAllByCriteria(按城市PublicId按城市){
返回svc.findAllByCity(byCity.getCityPublicId())
}
@GetMapping(path=“/search”,params={“cityId”,“便利设施”})
公共列表getAllByCriteria(按城市公共性按城市数据){
返回svc.findAllByCityAndAmenities(bycityandamenities.getCityPublicId(),bycityandamenities.getamenities())
}
@GetMapping(path=“/search”,params={“便利性”})
公共列表getAllByCriteria(ByAmency ByAmency){
返回svc.findallbymenity(byAmenity.getAmenity());
}
您基本上有以下选项:
- 使用命令从输入数据以编程方式创建查询。这给了您最大的灵活性,但也需要最多的工作
- 。几乎相同的灵活性和几乎相同的工作量
- 。工作很少,灵活性有限
关于PS:。您基本上有以下选项:
- 使用命令从输入数据以编程方式创建查询。这给了您最大的灵活性,但也需要最多的工作
- 。几乎相同的灵活性和几乎相同的工作量
- 。工作很少,灵活性有限
关于PS:。基本上与在一种方法中创建“如果”相同。我想知道是否可以为同一请求参数(如2个便利设施)获取多个值。如果可能,链接地址是什么?基本上与在一种方法中创建“如果”相同。我想知道是否可以为同一请求参数(例如2个便利设施)获取多个值。如果可能的话,链接地址是什么?我可以通过示例询问如何处理整数查询吗?然后给定的链接只处理字符串。相同。您不能指定匹配的类型,因为它只进行等于匹配。我可以通过示例询问如何使用查询处理整数吗?然后给定的链接只处理字符串。相同。您不能指定匹配的类型,因为它只进行相等匹配。