這是我的端點 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,我已經改進了程式碼,但這個問題仍然存在! 希望能找到解決方法。
重置程式碼後,它正在工作......
雷雷