Dies ist mein Endpunkt http://localhost:8080/country/all Sie können allen Ländern antworten
Retouren wurden nicht gefunden, wenn ich sie filtern möchte Land ist leer und gibt eine Ausnahme zurück throw new RecordNotFoundException("Ungültige Anfrage, keine Daten zurückgegeben"); Es gibt einen Eintrag in meiner Datenbank County_Code Land KM Komoren
Das ist meine JSON-Nutzlast
{ "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; }
Danke Rashin, ich habe den Code verbessert, aber das Problem besteht immer noch! Ich hoffe, dass eine Lösung gefunden werden kann.
Nach dem Zurücksetzen des Codes funktioniert es...