![](/img/trans.png)
[英]How to handle the SQLIntegrityConstraintViolationException in Spring Boot?
[英]how to use spring boot to handle different search?
在spring boot中使用spring data jpa创建搜索功能的最佳实践是什么?
@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;
}
当前,我必须确定所有可能的准则组合才能使用相应的方法,是否存在通用的方式来处理所有情况? 或至少不对所有可能的组合进行硬编码。
PS:如果我想按多种便利条件过滤结果,是否可以使用findByAmenitiesContains(set)? 酒店实体具有一套便利设施的地方。 我必须使用@query创建自定义查询吗?
谢谢。
事后,您可以使用不同的请求有效负载实体来处理同一终结点
@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());
}
您基本上有以下选择:
关于PS: 查询推导的功能已被详细记录 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.