Gudang entiti memanjangkan JpaRepository<Entity, Id> dan JpaSpecificationExecutor<Entity> dan EntitySpec memanjangkan Specification<Entity>
P粉653045807
P粉653045807 2024-04-06 17:11:03
0
1
873

Ini adalah titik akhir saya http://localhost:8080/country/all Anda boleh membalas semua negara

pulangan tidak dijumpai apabila saya ingin menapisnya Negara kosong dan mengembalikan pengecualian buang RecordNotFoundException baru("Permintaan tidak sah, tiada data dikembalikan"); Terdapat rekod dalam pangkalan data saya Negara Kod_Kaunti KM Comoros

Ini adalah muatan json saya

{
     "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;
    }

Terima kasih Rashin, saya telah menambah baik kod tetapi masalahnya masih wujud! Harap penyelesaian dapat dicari.

Selepas menetapkan semula kod ia berfungsi...

P粉653045807
P粉653045807

membalas semua(1)
P粉198814372
enter code here

 
 @GetMapping("/all")
  public ResponseEntity> getAll(
      @Valid @RequestBody Map request) {

try {
  countryService.customPage.init();
  
  if (request.keySet().contains("page")) {
    countryService.customPage.setPage(request.get("page").toString());
  }

  if (request.keySet().contains("size")) {
    countryService.customPage.setSize(request.get("size").toString());
  }

  
  Sort ordine=(request.keySet().contains("sort")) ? 
      countryService.customSort.sorted((CustomSort[]) request.get("sort"))
      : Sort.unsorted();
  
  // page default value 1 and size default value DEFAULT_SIZE
  Pageable pageable = PageRequest.of(
      countryService.customPage.getPage(),
      countryService.customPage.getSize(),
      ordine
      );
      

  /* Validazione */

  Map countries;
  /* filter */
  if (request.keySet().contains("country_code")) {
    List list = (List) request.get("country_code");
    countries = countryService.getByCountryCode(list, pageable);
  } else {
    countries = countryService.getAll(pageable);
  }

  //countryService restituisce empty se la pagina richiesta è maggiore di quelle presenti
  //se la richiesta non restituisce risultati
  if (countryService.isEmpty()) {
    
    if (((Integer) countries.get("currentPage")).intValue()>
        ((Integer) countries.get("totalPages")).intValue()) {
      throw new RecordNotFoundException("The page " +
      (countryService.customPage.getPage()+1) +
      " is over the total page");
    }
    // la tabella interrogata non ha dati
    throw new RecordNotFoundException("Invalid request, return no data");
  }

  ResponseEntity> response = new ResponseEntity(
      countries,
      HttpStatus.OK);
  return response;
} catch (RecordNotFoundException | NumberFormatException re) {
  Map errors = new LinkedHashMap();
  errors.put("errors", re.getMessage());
  ResponseEntity> response = new ResponseEntity(
      errors,
      HttpStatus.INTERNAL_SERVER_ERROR);
  return response;
} catch (Exception e) {
  Map errors = new LinkedHashMap();
  errors.put("errors", Errors.all);
  ResponseEntity> response = new ResponseEntity(
      errors,
      HttpStatus.BAD_REQUEST);
  return response;
}
}


 /**
 * @param list
 * @param pageable
 * @return
 */
public Map getByCountryCode(List list, Pageable pageable) {
    /* paginazione filtrata */
    Specs countrySpecs = new Specs(new SearchCriteria("country_code", "in", list));
    pageCountries = repository.findAll(
        countrySpecs,
        pageable);
    countries = pageCountries.getContent();

    Map service = new LinkedHashMap();
    // aggiunta delle informazioni sulla paginazione
    service.put("countries", countries);
    service.put("currentPage", pageCountries.getNumber()+1);
    service.put("totalItems", pageCountries.getTotalElements());
    service.put("totalForPage", pageCountries.getSize());
    service.put("totalPages", pageCountries.getTotalPages());

    return service;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan