有没有一种方法可以减少Page返回上的参数数量?

时间:2019-12-19 20:14:36

标签: java rest spring-mvc pagination

我正在使用Spring在我的应用程序中实现分页,并且endpoits的返回为Page。该对象返回很多参数。有办法消除其中一些吗?

存储库扩展了JpaRepository

服务

@Autowired
ClientRepositoy clientRepositoy;

public List<Client> findAllList() {
    return clientRepositoy.findAll();
}

CONTROLLER

@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
    },

1 个答案:

答案 0 :(得分:0)

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

我们可以使用mixin。

如果创建了ObjectMapper bean,则可以指定您的mixin,它将在序列化期间使用。

它看起来像下面的代码。

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 Mix-In Annotations to reuse, decouple