这是我的端点 http://localhost:8080/country/all
回复所有国家都可以
当我想过滤它们时返回未找到
国家为空并返回异常
throw new RecordNotFoundException("无效请求,无数据返回");
在我的数据库中有一条记录
县_代码 国家
KM科摩罗
这是我的 json 负载
{
"country_code":["KM"]
}
public interface CountryRepo extends JpaRepository, JpaSpecificationExecutor {
}
public final class CountrySpecs implements Specification {
final private SearchCriteria criteria;
public CountrySpecs(SearchCriteria searchCriteria) {
this.criteria = searchCriteria;
}
@Override
@Nullable
public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder builder) {
switch (criteria.getOperation()) {
case ":":
if (root.get(criteria.getKey()).getJavaType() == String.class) {
return builder.like(
root.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
谢谢Rashin,我已经改进了代码,但这个问题仍然存在!
希望能找到解决办法。
重置代码后,它正在工作......
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;
}