这是我的端点 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,我已经改进了代码,但这个问题仍然存在! 希望能找到解决办法。
重置代码后,它正在工作......