java - 有没有办法减少页面返回的参数数量?
问题描述
我正在使用 Spring 在我的应用程序中实现分页,并且端点的返回是Page
. 这个对象返回很多参数。有没有办法消除其中的一些?
存储库扩展了 JpaRepository
服务
@Autowired
ClientRepositoy clientRepositoy;
public List<Client> findAllList() {
return clientRepositoy.findAll();
}
控制器
@Autowired
ServiceClient serviceClient;
@GetMapping("/clients")
public Page<Client> getClients() {
List<Client> clients = serviceClient.findAllList();
return new PageImpl<>(convertToDto(clients), PageRequest.of(0, 10), clients.size());
}
JSON 返回
{
"content": [
{
"id": 1,
"name": "TEST"
}
],
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 10,
"paged": true,
"unpaged": false
},
"totalPages": 1,
"totalElements": 7,
"last": true,
"size": 10,
"number": 0,
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"first": true,
"numberOfElements": 7,
"empty": false
}
我想删除整个 Pageable 对象,例如:
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 10,
"paged": true,
"unpaged": false
},
解决方案
所以我们在响应中使用了一个我们无法修改的类
我们可以使用mixin。
如果您创建了 ObjectMapper bean,则可以指定您的 mixin,它将在序列化期间使用。
它看起来像下面的代码。
用于设置 getter 可见性的 mixin。它将在序列化期间使用:
public interface PageImplMixin {
@JsonIgnore
Pageable getPageable();
}
自己的对象映射器 bean,它被配置为在 pageimpl 类将被序列化时使用我们的 mixin:
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().setMixIns(Map.of(PageImpl.class, PageImplMixin.class));
}
}
一些链接来理解这个概念:
推荐阅读
- angular - 如何在打字稿/角度程序上使用 hubspot Conversations sdk?
- javascript - 要求使 div 可拖动而不是放在屏幕外
- go - 使用 ssh golang 包解析 ssh 密钥
- error-handling - 最后会在 XMPP 中类比吗?
- map-projections - Openlayers 矢量源投影反向 Y 轴
- c# - 无法创建 DockerFile - 复制错误,找不到项目
- javascript - 如何在 IR 中保存 APEX_ITEM.TEXT 字段值?
- python - 数据基数不明确:确保所有数组包含相同数量的样本 Tensorflow
- hive - 将 hive 版本的 cdh 升级到 3.1.2 hivemetastore 服务错误
- node.js - API GET 请求未反映 DB 中的更改,延迟 5 分钟