Spring data Rest:我们可以重命名分页结果中的“content”属性吗?

use*_*222 6 java spring spring-data-jpa spring-data-rest spring-boot

我有一个端点,它将结果作为分页输出提供,如下所示。

代码片段:

public Page<MyObject> getData(Pageable pageable) {
    return repository.findAll(pageable);
}
Run Code Online (Sandbox Code Playgroud)

回复:

{
    "content": [
        {
            "id": 2,
            "name": "",
            "regionName": "",
            "category1": "",
            "category2": "",
            "modifiedDateTime": "",
            "abstract": ""
        }
    ],
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true
        },
        "offset": 0,
        "pageSize": 1,
        "pageNumber": 0,
        "paged": true,
        "unpaged": false
    },
    "last": false,
    "totalPages": 10,
    "totalElements": 5808,
    "size": 1,
    "number": 0,
    "numberOfElements": 1,
    "first": true,
    "sort": {
        "sorted": false,
        "unsorted": true
    }
}
Run Code Online (Sandbox Code Playgroud)

我们可以将属性名称“content”重命名为“data”等其他名称吗?

另外,我们可以删除输出中的附加分页参数吗?例如:排序、偏移

Nik*_*nko 5

您不能修改 PageImpl 类并添加@JsonPropertys 来重命名,但您可以为其创建一个装饰器。另外,如果您需要隐藏可分页(或任何其他属性),那么您只需不要将它们暴露给装饰器即可。

class PageDecorator<T> {

    private final Page<T> page;

    public PageDecorator(Page<T> page) {
        this.page = page;
    }

    @JsonProperty("data") // override property name in json
    public List<T> getContent() {
        return this.page.getContent();
    }

    public int getTotalPages() {
        return page.getTotalPages();
    }

    public long getTotalElements() {
        return page.getTotalElements();
    }

    ... 
}
Run Code Online (Sandbox Code Playgroud)

您的代码应如下所示:

public PageDecorator<MyObject> getData(Pageable pageable) {
    return new PageDecorator<>(repository.findAll(pageable));
}
Run Code Online (Sandbox Code Playgroud)