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

如何用Java泛型实现通用分页响应类(避免重复代码)

通用分页响应类的正确泛型实现与使用方式

核心泛型类实现

把分页公共字段(总条数、页码、每页大小等)抽离到泛型类中,用泛型参数T指代data数组内的具体对象类型,就能彻底复用分页逻辑,避免重复代码。

Java 示例(配合Spring/Lombok简化)

import lombok.Data;
import java.util.List;

@Data // Lombok注解自动生成getter/setter、构造方法等
public class DataWithCount<T> {
    // 分页公共字段
    private long totalCount;
    private int page;
    private int pageSize;
    // 泛型数据列表,T可替换为任意实体类(Person/Animal等)
    private List<T> data;
}

C# 示例

public class DataWithCount<T>
{
    public long TotalCount { get; set; }
    public int Page { get; set; }
    public int PageSize { get; set; }
    public List<T> Data { get; set; }
}

实际使用方式

在API接口中返回泛型响应

以Spring Boot为例,直接用泛型类替代之前的PersonWithCount/AnimalWithCount:

@GetMapping("/persons")
public ResponseEntity<DataWithCount<Person>> getPersons(
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(defaultValue = "10") int pageSize) {
    // 业务查询:获取总条数和分页数据
    long total = personService.countAll();
    List<Person> personList = personService.findPage(page, pageSize);
    
    // 组装泛型响应
    DataWithCount<Person> response = new DataWithCount<>();
    response.setTotalCount(total);
    response.setPage(page);
    response.setPageSize(pageSize);
    response.setData(personList);
    
    return ResponseEntity.ok(response);
}

如果是C# ASP.NET Core:

[HttpGet("animals")]
public IActionResult GetAnimals(int page = 1, int pageSize = 10)
{
    var total = _animalService.GetTotalCount();
    var animalList = _animalService.GetPagedData(page, pageSize);
    
    var response = new DataWithCount<Animal>
    {
        TotalCount = total,
        Page = page,
        PageSize = pageSize,
        Data = animalList
    };
    return Ok(response);
}

常见问题解决

如果遇到JSON序列化/反序列化失败(无法识别泛型类型):

  • Java Jackson:手动反序列化时需用TypeReference指定泛型具体类型:
    String json = "..."; // API返回的JSON字符串
    ObjectMapper mapper = new ObjectMapper();
    DataWithCount<Person> result = mapper.readValue(
            json,
            new TypeReference<DataWithCount<Person>>() {}
    );
    
  • C# Newtonsoft.Json:直接指定泛型类型反序列化:
    string json = "...";
    var result = JsonConvert.DeserializeObject<DataWithCount<Animal>>(json);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:25:28