java - 休息控制器响应页面返回空对象
问题描述
我使用 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 的 List 返回类型的响应是预期的正确响应:
[ {“salesPrice”:23000,“id”:1,“version”: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 响应返回,那么这里有什么问题呢?任何帮助都感激不尽。
解决方案
Don't use Page<ObjectDto>
as return type of rest methods. This Page is not for that.
use return type as List<ObjectDto>
and in log you are printing
log.info(String.valueOf(objectDtos.getTotalElements()));
so its printing properly, if you return objectDtos.getTotalElements()
in rest method then it will also work
推荐阅读
- python - Python非阻塞通知/消息
- java - 我有以下两种在 Java 中声明整数数组的不同方法,一种有效,一种无效,为什么?
- javascript - 在javascript中使用for循环内的switch case验证表单字段
- postgresql - 什么时候应该使用 PostgreSQL 索引包含?
- powershell - install-package:检测到包“Microsoft.Data.Sqlite”的依赖循环
- php - 如何使用 Codeigniter 数组使用 update_batch?
- javascript - 无需 JavaScript 且无需加载静态工具包即可加载单个 TypeKit 字体系列
- mysql - mysql从多个表中选择总和和平均值的数据
- java - 在任何线程上如何从对话框中获取值?
- javascript - 需要帮助创建动态导航菜单