首页 > 解决方案 > 有没有办法减少页面返回的参数数量?

问题描述

我正在使用 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
    },

标签: javarestspring-mvcpagination

解决方案


所以我们在响应中使用了一个我们无法修改的类

我们可以使用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));
  }
}

一些链接来理解这个概念:

JacksonMixInAnnotations 混入注解以重用、解耦


推荐阅读