根据你提供的参数信息:
| 序号 | 参数 | 参数说明 |
|------|------------|----------------------|
| 1 | PageResult | 信息记录分页结果 |
这是一个典型的 **分页查询接口返回结构**,表示某个接口返回一个名为 `PageResult` 的对象,封装了“信息记录”的分页数据。
我们将基于通用业务场景(如日志、操作记录、审计、数据列表等)进行建模,并生成:
- ✅ 完整的 JSON 响应示例
- ✅ `PageResult` 结构定义(含泛型列表和分页元数据)
- ✅ 示例信息记录项 `InfoRecordDTO`
- ✅ Python 和 Java 实现代码
- ✅ 接口设计建议
---
### ✅ JSON 响应示例(信息记录分页结果)
```json
{
"success": true,
"message": "查询成功",
"data": {
"pageResult": {
"list": [
{
"id": "LOG_20250405_001",
"title": "用户登录系统",
"content": "用户 admin (ID: U001) 于 2025-04-05T08:30:22Z 从 IP 192.168.1.100 登录",
"type": "LOGIN",
"level": "INFO",
"source": "AUTH_SERVICE",
"operator": "admin",
"operateTime": "2025-04-05T08:30:22Z",
"createTime": "2025-04-05T08:30:25Z"
},
{
"id": "LOG_20250405_002",
"title": "修改预算报表权限",
"content": "将报表 'SALES_Q1' 的查看权限授予用户 zhangwei",
"type": "PERMISSION_UPDATE",
"level": "WARN",
"source": "BI_SYSTEM",
"operator": "admin",
"operateTime": "2025-04-05T09:15:40Z",
"createTime": "2025-04-05T09:15:42Z"
},
{
"id": "LOG_20250405_003",
"title": "数据推送失败",
"content": "向外部系统 DATA_LAKE 推送销售数据失败,错误码:503",
"type": "DATA_SYNC",
"level": "ERROR",
"source": "SYNC_JOB_001",
"operator": "system",
"operateTime": "2025-04-05T09:30:00Z",
"createTime": "2025-04-05T09:30:05Z"
}
],
"total": 156,
"pageNum": 1,
"pageSize": 10,
"pages": 16
}
}
}
```
> 🔹 场景说明:
> 用户请求“信息记录”列表(如操作日志、事件流),后端以分页形式返回。
---
### ✅ 字段解释(`PageResult` + `InfoRecordDTO`)
#### `PageResult<T>` 分页容器
| 字段名 | 类型 | 说明 |
|------------|--------------|------|
| `list` | List<T> | 当前页的数据记录列表 |
| `total` | Long / Integer | 总记录数 |
| `pageNum` | Integer | 当前页码(通常从 1 开始) |
| `pageSize` | Integer | 每页条数 |
| `pages` | Integer | 总页数(可计算得出) |
#### `InfoRecordDTO`(信息记录项)
| 字段名 | 类型 | 说明 |
|---------------|--------------|------|
| `id` | String | 记录唯一标识 |
| `title` | String | 标题(简要描述) |
| `content` | String | 详细内容(支持富文本或 JSON 字符串) |
| `type` | String | 类型:LOGIN / PERMISSION_UPDATE / DATA_SYNC / ERROR 等 |
| `level` | String | 日志级别:INFO / WARN / ERROR / DEBUG |
| `source` | String | 来源模块或服务名称 |
| `operator` | String | 操作人(用户账号或系统) |
| `operateTime` | DateTime | 操作发生时间(业务时间) |
| `createTime` | DateTime | 记录创建时间(入库时间) |
---
### ✅ Python: Pydantic 模型定义(FastAPI 风格)
```python
from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
# 信息记录 DTO
class InfoRecordDTO(BaseModel):
id: str
title: str
content: str
type: str # LOGIN, PERMISSION_UPDATE, DATA_SYNC...
level: str # INFO, WARN, ERROR
source: str
operator: str
operateTime: datetime
createTime: datetime
# 分页结果包装类(泛型模拟)
class PageResult(BaseModel):
list: List[InfoRecordDTO]
total: int
pageNum: int
pageSize: int
pages: int
# 统一响应体
class ApiResponse(BaseModel):
success: bool
message: str
data: PageResult
```
#### FastAPI 接口使用示例:
```python
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/info-record/page", response_model=ApiResponse)
def get_info_records(
pageNum: int = Query(1, ge=1),
pageSize: int = Query(10, ge=1, le=100)
):
# 模拟数据库查询
total = 156
pages = (total + pageSize - 1) // pageSize
records = [
InfoRecordDTO(
id="LOG_20250405_001",
title="用户登录系统",
content="用户 admin (ID: U001) 于 2025-04-05T08:30:22Z 从 IP 192.168.1.100 登录",
type="LOGIN",
level="INFO",
source="AUTH_SERVICE",
operator="admin",
operateTime=datetime(2025, 4, 5, 8, 30, 22),
createTime=datetime(2025, 4, 5, 8, 30, 25)
),
InfoRecordDTO(
id="LOG_20250405_002",
title="修改预算报表权限",
content="将报表 'SALES_Q1' 的查看权限授予用户 zhangwei",
type="PERMISSION_UPDATE",
level="WARN",
source="BI_SYSTEM",
operator="admin",
operateTime=datetime(2025, 4, 5, 9, 15, 40),
createTime=datetime(2025, 4, 5, 9, 15, 42)
)
]
page_result = PageResult(
list=records,
total=total,
pageNum=pageNum,
pageSize=pageSize,
pages=pages
)
return {
"success": True,
"message": "查询成功",
"data": page_result
}
```
---
### ✅ Java DTO 示例(Spring Boot 风格)
#### 1. `InfoRecordDTO.java`
```java
import java.time.LocalDateTime;
public class InfoRecordDTO {
private String id;
private String title;
private String content;
private String type; // LOGIN, PERMISSION_UPDATE...
private String level; // INFO, WARN, ERROR
private String source;
private String operator;
private LocalDateTime operateTime;
private LocalDateTime createTime;
// Getters and Setters ...
}
```
#### 2. `PageResult<T>.java`(泛型支持)
```java
import java.util.List;
public class PageResult<T> {
private List<T> list;
private long total;
private int pageNum;
private int pageSize;
private int pages;
public PageResult() {}
public PageResult(List<T> list, long total, int pageNum, int pageSize) {
this.list = list;
this.total = total;
this.pageNum = pageNum;
this.pageSize = pageSize;
this.pages = (int) Math.ceil((double) total / pageSize);
}
// Getters and Setters ...
}
```
#### 3. Controller 示例
```java
@RestController
@RequestMapping("/info-record")
public class InfoRecordController {
@GetMapping("/page")
public ResponseEntity<ApiResponse<PageResult<InfoRecordDTO>>> getPage(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
List<InfoRecordDTO> list = infoRecordService.queryPage(pageNum, pageSize);
long total = infoRecordService.countTotal();
PageResult<InfoRecordDTO> pageResult = new PageResult<>(list, total, pageNum, pageSize);
return ResponseEntity.ok(ApiResponse.success(pageResult));
}
}
```
---
### ✅ 分页逻辑建议(Java 后端)
```java
// 数据库分页参数计算
int offset = (pageNum - 1) * pageSize;
List<InfoRecordDTO> list = mapper.selectByPage(offset, pageSize);
long total = mapper.countAll();
```
---
### ❗注意事项总结
| 项目 | 建议 |
|------|------|
| 时间精度 | 使用 ISO 8601 格式(如 `2025-04-05T08:30:22Z`)避免时区问题 |
| 内容长度 | `content` 字段建议限制长度(如 2000 字符),避免性能问题 |
| 查询性能 | 在 `operateTime`, `type`, `operator`, `level` 上建立复合索引 |
| 权限控制 | 敏感记录(如权限变更)需做权限校验,仅授权用户可查 |
| 数据保留 | 可设置自动归档策略(如只保留最近 6 个月) |
| 泛型设计 | `PageResult<T>` 支持复用到其他分页接口(如用户分页、订单分页) |
---
###