Voici mon point de terminaison http://localhost:8080/country/all Vous pouvez répondre à tous les pays
retours introuvables lorsque je souhaite les filtrer Le pays est vide et renvoie une exception throw new RecordNotFoundException("Demande invalide, aucune donnée renvoyée"); Il y a un enregistrement dans ma base de données County_Code Pays KM Comores
See More
Voici ma charge utile 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; }
Merci Rashin, j'ai amélioré le code mais le problème existe toujours ! J'espère qu'une solution pourra être trouvée.
Après avoir réinitialisé le code, cela fonctionne...