当前位置: 代码迷 >> java >> 休息控制器响应页面 返回空对象
  详细解决方案

休息控制器响应页面 返回空对象

热度:54   发布时间:2023-07-18 09:02:53.0

我已经使用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,“ version”:1,“ createdOn”:“ 25 Feb 2019,05:53”,“ lastUpdatedOn”:“ 25 Feb 2019,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响应返回,那么这里可能是什么问题? 任何帮助都感激不尽。

不要使用Page<ObjectDto>作为rest方法的返回类型。 此页面不适合该页面。 使用返回类型作为List<ObjectDto>

并在日志中您正在打印

log.info(String.valueOf(objectDtos.getTotalElements()));

因此它的打印正确,如果您在rest方法中返回objectDtos.getTotalElements() ,那么它也将正常工作