java 为什么Spring的PageImpl包含了太多的内容?我们可以创建一个自定义的PageImpl吗?

kwvwclae  于 2023-02-21  发布在  Java
关注(0)|答案(1)|浏览(143)

我正在使用Spring提供的默认页面类型。
这是当我点击分页端点时得到的值。

{
"content": [

],
"pageable": {
    "sort": {
        "empty": true,
        "sorted": false,
        "unsorted": true
    },
    "offset": 0,
    "pageNumber": 0,
    "pageSize": 20,
    "paged": true,
    "unpaged": false
},
"totalPages": 1,
"totalElements": 10,
"last": true,
"size": 20,
"number": 0,
"sort": {
    "empty": true,
    "sorted": false,
    "unsorted": true
},
"numberOfElements": 10,
"first": true,
"empty": false
}

在这里,我可以看到多个其他值,而不是像排序,分页和未分页所需的数据。这些细节是不必要的,根据我的要求。
有没有什么方法可以限制页面数据类型包含的数据,比如创建一个CustomPageImpl?如果有,最好的方法是什么?
我知道我可以创建一个新的DTO并根据要求传输数据,但我想知道最佳做法。
谢谢

jexiocij

jexiocij1#

创建一个类来实现Page接口,并使用@JsonIgnore忽略不必要的字段。

public class CustomPageImpl<T> implements Page<T> {

private final Page<T> delegate;

public CustomPageImpl(List<T> content, int number, int size, long totalElements) {
    this.delegate = new PageImpl(content, PageRequest.of(number, size), totalElements);
}

@JsonProperty
public int getTotalPages() {
    return this.delegate.getTotalPages();
}

@JsonProperty
public long getTotalElements() {
    return this.delegate.getTotalElements();
}

@JsonProperty
public int getNumber() {
    return this.delegate.getNumber();
}

@JsonProperty
public int getSize() {
    return this.delegate.getSize();
}

@JsonProperty
public int getNumberOfElements() {
    return this.delegate.getNumberOfElements();
}

@JsonProperty
public List<T> getContent() {
    return this.delegate.getContent();
}

@JsonProperty
public boolean hasContent() {
    return this.delegate.hasContent();
}

@JsonIgnore
public Sort getSort() {
    return this.delegate.getSort();
}

@JsonIgnore
public boolean isFirst() {
    return this.delegate.isFirst();
}

@JsonIgnore
public boolean isLast() {
    return this.delegate.isLast();
}

@JsonIgnore
public boolean hasNext() {
    return this.delegate.hasNext();
}

@JsonIgnore
public boolean hasPrevious() {
    return this.delegate.hasPrevious();
}

@JsonIgnore
public Pageable nextPageable() {
    return this.delegate.nextPageable();
}

@JsonIgnore
public Pageable previousPageable() {
    return this.delegate.previousPageable();
}

public <U> Page<U> map(final Function<? super T, ? extends U> function) {
    return this.delegate.map(function);
}

@JsonIgnore
public Iterator<T> iterator() {
    return this.delegate.iterator();
}

}

相关问题