Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用spring boot处理不同的搜索?_Java_Spring_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Java 如何使用spring boot处理不同的搜索?

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

使用SpringDataJPA在SpringBoot中创建搜索功能的最佳实践是什么

@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个便利设施)获取多个值。如果可能的话,链接地址是什么?我可以通过示例询问如何处理整数查询吗?然后给定的链接只处理字符串。相同。您不能指定匹配的类型,因为它只进行等于匹配。我可以通过示例询问如何使用查询处理整数吗?然后给定的链接只处理字符串。相同。您不能指定匹配的类型,因为它只进行相等匹配。