You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data Rest:能否修改分页结果中的content属性名称?

在Spring Data Rest中修改分页结果的"content"属性名称

当然可以!要修改Spring Data Rest分页返回结果里的content属性名称,有两种实用的方法,你可以根据自己的场景选择:

方法一:自定义分页DTO并转换(适合自定义Controller场景)

如果你的接口是自己编写的Controller方法(比如你提供的getData方法),可以自定义一个分页返回对象,把content字段改成你想要的名称,然后在Service层完成转换:

  1. 先定义自定义分页类,用@JsonProperty指定序列化后的字段名:
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
import org.springframework.data.domain.Page;

public class CustomPage<T> {
    // 把这里的"data"改成你想要的属性名
    @JsonProperty("data")
    private List<T> content;
    private int pageNumber;
    private int pageSize;
    private long totalElements;
    private int totalPages;
    private boolean last;

    // 直接从Page对象转换的构造方法
    public CustomPage(Page<T> page) {
        this.content = page.getContent();
        this.pageNumber = page.getNumber();
        this.pageSize = page.getSize();
        this.totalElements = page.getTotalElements();
        this.totalPages = page.getTotalPages();
        this.last = page.isLast();
    }

    // 自行补充getter和setter,也可以用Lombok简化
}
  1. 修改你的Service/Controller方法,把原Page对象转换成自定义分页对象返回:
public CustomPage<MyObject> getData(Pageable pageable) {
    Page<MyObject> originalPage = repository.findAll(pageable);
    return new CustomPage<>(originalPage);
}

这种方式的好处是灵活可控,你可以自由调整返回的字段,甚至添加或移除某些分页属性。

方法二:用Jackson MixIn全局修改(适合Spring Data Rest自动暴露的Repository)

如果是Spring Data Rest自动生成的Repository接口(没有自定义Controller),想要全局修改所有分页返回的content字段名,可以用Jackson的MixIn功能来修改Page类的序列化规则:

  1. 创建一个MixIn抽象类,指定getContent()方法对应的JSON字段名:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.springframework.data.domain.Page;
import java.util.List;

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY)
public abstract class PageMixIn<T> {
    // 替换成你想要的属性名
    @JsonProperty("data")
    abstract List<T> getContent();
}
  1. 配置Spring注册这个MixIn,让Jackson生效:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.Page;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Configuration
public class JacksonConfiguration {
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
        return builder -> builder.mixIn(Page.class, PageMixIn.class);
    }
}

这样所有Spring Data Rest返回的Page对象,在序列化时content都会变成你指定的名称,不用修改任何Repository或Service代码,全局生效。

内容的提问来源于stack exchange,提问作者user3016222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:40:56