这是我的端点 http://localhost:8080/country/all 回复所有国家都可以
当我想过滤它们时返回未找到 国家为空并返回异常 throw new RecordNotFoundException("无效请求,无数据返回"); 在我的数据库中有一条记录 县_代码 国家 KM科摩罗
这是我的 json 负载
{
"country_code":["KM"]
}
public interface CountryRepo extends JpaRepository<Country, Id>, JpaSpecificationExecutor<Country> {
}
public final class CountrySpecs<T> implements Specification<T> {
final private SearchCriteria criteria;
public CountrySpecs(SearchCriteria searchCriteria) {
this.criteria = searchCriteria;
}
@Override
@Nullable
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
switch (criteria.getOperation()) {
case ":":
if (root.get(criteria.getKey()).getJavaType() == String.class) {
return builder.like(
root.<String>get(criteria.getKey()),
"%" + criteria.getValue() + "%");
} else {
return builder.equal(root.get(criteria.getKey()),
criteria.getValue());
}
case "=":
return builder.equal(root.get(criteria.getKey()),
criteria.getValue());
case "in":
return builder.in(root.get(criteria.getKey())).value(criteria.getValue());
default:
return null;
}
}
}
@GetMapping("/all")
public ResponseEntity<Map<String, Object>> getAll(
@Valid @RequestBody Map<String, Object> request) throws Exception {
List<Country> countries = new ArrayList<>();
int page = (request.get("page") != null) ? (int) request.get("page") : 1;
int size = (request.get("size") != null) ? (int) request.get("size") : DEFAULT_SIZE;
// page-1 mi da la possibilità di scrivere nel payload page=1
Pageable pageable = PageRequest.of(
page,
size);
Page<Country> pageCountries = null;
/* Validazione */
/* filter */
if (request.keySet().size() > 0) {
CountrySpecs<Country> countrySpecs = null;
if (request.keySet().contains("country_code")) {
List<String> list = (List<String>) request.get("country_code");
/* paginazione filtrata */
countrySpecs = new CountrySpecs<>(new SearchCriteria("country_code", "in", list));
pageCountries = repository.findAll(
countrySpecs,
pageable);
countries = pageCountries.getContent();
}
} else {
pageCountries = repository.findAll(pageable);
countries = pageCountries.getContent();
}
if (countries.isEmpty()) {
// la tabella interrogata non ha dati
throw new RecordNotFoundException("无效请求,无数据返回");
}
Map<String, Object> obj = new TreeMap<>();
// aggiunta delle informazioni sulla paginazione
obj.put("countries", countries);
obj.put("currentPage", pageCountries.getNumber());
obj.put("totalItems", pageCountries.getTotalElements());
obj.put("totalPages", pageCountries.getTotalPages());
ResponseEntity<Map<String, Object>> response = new ResponseEntity<>(
obj,
HttpStatus.OK);
return response;
}
谢谢Rashin,我已经改进了代码,但这个问题仍然存在! 希望能找到解决办法。
重置代码后,它正在工作......
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
enter code here @GetMapping("/all") public ResponseEntity