我已经使用Spring Data Pageable实现分页和排序。我相关的代码段是:
//GET API designed as POST due to Request Body, in lines of ES APIs
@PostMapping(value = "/v2")
public Page<ObjectDto> getObjects(@RequestBody @Valid Map<Integer, FilterRequestDto> filterDtoMap, Pageable pageable) {
Page<ObjectDto> objectDtos = myService.getDtos(filterDtoMap, pageable);
log.info(String.valueOf(objectDtos.getTotalElements()));
return objectDtos;
}
尽管我有数据(从日志中确认),但上述API仍以 {} 进行响应。
但是,当我像下面的代码片段那样返回List时:
@PostMapping(value = "/v2")
public List<ObjectDto> getObjects(@RequestBody @Valid Map<Integer,FilterRequestDto> filterDtoMap, Pageable pageable) {
Page<ObjectDto> objectDtos = myService.getDtos(filterDtoMap, pageable);
log.info(String.valueOf(objectDtos.getTotalElements()));
return objectDtos.getContent();
}
对于完全相同的API,对列表返回类型的响应是预期的正确响应:
[ { “ sellingPrice”:23000, “ id”:1 “版本”:1, “ createdOn”:“ 2019年2月25日,05:53”, “ lastUpdatedOn”:“ 2019年2月25日,05:53” } ]
存储库代码:
@Repository
public interface MyObjectRepository extends JpaRepository<MyObject, Long>, JpaSpecificationExecutor<MyObject> {}
服务代码:
public Page<ObjectDto> getTyres(Map<Integer, FilterRequestDto> filterDtoMap, Pageable pageable) {
List<FilterDto> filterDtoList = filtersService.getAllFiltersById(filterDtoMap.keySet());
return objectMapper.toDto(myObjectRepository.findAll(ObjectSpecs.filter(filterDtoList, filterDtoMap), pageable));
}
据我所知,我们可以将页面作为Rest API响应返回,那么这可能是什么问题?任何帮助将不胜感激。
答案 0 :(得分:0)
请勿使用Page<ObjectDto>
作为rest方法的返回类型。此页面不适合该页面。
使用返回类型为 List<ObjectDto>
并且在日志中您正在打印
log.info(String.valueOf(objectDtos.getTotalElements()));
因此它可以正确打印,如果您在rest方法中返回objectDtos.getTotalElements()
,那么它也可以工作
答案 1 :(得分:0)
我能够通过Page<ObjectDto>
获取详细信息。
我认为您的代码中的DTO映射可能存在问题。
您能分享有助于理解该问题的myService.getDtos(filterDtoMap, pageable);
吗?