正在加载接口文档,请稍候

清吾的 API 接口参考文档:左侧按模块组织的接口树,点击任一接口可在右侧查看该接口的完整说明、参数与示例。

清吾的 API
接口参考

一套用 Spring Boot 3 与 MySQL 构建的 RESTful 服务。统一的响应结构、语义化的状态码,以及与代码同步演进的接口契约。

65 个接口 12 个模块 统一响应 code · message · data Bearer 令牌鉴权
1 curl -X POST https://boot.qingwu.ink/api/v1/auth/login -H "Content-Type: application/json" -d '{"username":"<你的账号>","password":"<你的密码>"}'
2 curl https://boot.qingwu.ink/api/v1/users/me -H "Authorization: Bearer <accessToken>"
3 https://boot.qingwu.ink/debug.html 打开可视化调试台,直接点击验证

基础约定

四个约定贯穿全部 65 个接口:统一的响应结构、语义化的状态码、Bearer 令牌鉴权,以及一致的参数校验反馈。

基础地址

所有接口统一挂载在 /api/v1 之下,版本号体现在路径中,便于未来平滑演进。

请求与响应

请求体统一为 application/json(文件上传为 multipart/form-data),响应统一为 JSON。

时间格式

日期时间使用 yyyy-MM-dd HH:mm:ss,日期使用 yyyy-MM-dd,时区固定为 Asia/Shanghai。

分页约定

页码从 1 开始。请求使用 pageNum 与 pageSize,pageSize 上限为 100。

统一响应结构 所有接口,含错误响应

无论成功还是失败,响应体始终包含 code、message、data 三个字段。 data 在无返回内容时为 null,字段本身不会消失。

成功响应
{
  "code": 200,
  "message": "操作成功",
  "data": { "id": 1, "username": "admin" },
  "timestamp": 1792113926072,
  "success": true
}
错误响应(HTTP 401)
{
  "code": 401,
  "message": "未登录或登录已过期",
  "data": null,
  "timestamp": 1792113835714,
  "success": false
}
鉴权与权限 Bearer 令牌 · 三级可见性

除标注为「公开」的接口外,全部接口都要求在请求头携带访问令牌。标注为「管理员」的接口还要求账号角色为 ADMIN。

请求头
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.SIGNATURE
公开 —— 无需令牌。若仍携带了合法令牌,服务端会解析出用户身份,用于返回 favorited 这类个性化字段。
需登录 —— 缺少或令牌失效时返回 401。
管理员 —— 已登录但角色不足时返回 403,错误码 1011。
accessToken 有效期 2 小时,refreshToken 有效期 7 天,签名算法 HS256。
状态码 60 个码位,按业务域分区

code 与 HTTP 状态码语义保持一致。1xxx 起为业务细分码,按模块分区:用户 1xxx、地区 2xxx、资讯 3xxx、天气 4xxx、文件 5xxx。

通用

200 / 201
成功 / 创建成功
400
请求参数错误
401
未登录或登录已过期
403
无权限访问该资源
404
请求的资源不存在
405
请求方法不被支持
409
数据冲突
413
上传内容超过大小限制
500 / 503
服务器内部错误 / 服务不可用

用户 1xxx

1001 · 1002 · 1003
用户名 / 邮箱 / 手机号已存在
1004
用户不存在
1005
用户名或密码错误
1006
账号已被禁用
1007
原密码不正确
1008
两次输入的密码不一致
1009
Token 无效
1010
Token 已过期
1011
该操作需要管理员权限

地区 2xxx · 资讯 3xxx

2001
地区不存在
2002
地区层级不正确
2003
该地区下存在子区域
3001
新闻不存在或已下架
3002
新闻分类不存在
3003
分类名称已存在
3004
该分类下仍有新闻
3005 / 3006
重复收藏 / 尚未收藏

天气 4xxx · 文件 5xxx

4001
暂无该城市的天气数据
4002
请指定城市名称或城市 ID
5001
上传文件不能为空
5002
不支持的文件类型
5003
文件上传失败
参数校验 字段级错误定位

参数校验在控制器层完成。校验失败返回 400,message 中会聚合全部失败字段,格式为 字段名: 提示语,多个字段以分号分隔。

校验失败响应
{
  "code": 400,
  "message": "username: 用户名需为 4-20 位字母、数字或下划线",
  "data": null,
  "timestamp": 1792113926072,
  "success": false
}
注册和登录

注册

创建新账号。密码以 BCrypt 加盐哈希后落库,任何接口都不会返回密码字段。

POST /api/v1/auth/register 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
UserVO
所属模块
注册和登录

请求体字段

字段类型必填说明
usernamestring必填用户名:4-20 位字母、数字或下划线 例如 zhangsan
passwordstring必填密码:6-20 位 例如 123456
confirmPasswordstring必填确认密码 例如 123456
nicknamestring可选昵称 例如 张三
emailstring可选邮箱 例如 zhangsan@example.com
phonestring可选手机号 例如 13800000001
provinceIdinteger可选省份 ID 例如 440000
cityIdinteger可选城市 ID 例如 440100
districtIdinteger可选区县 ID 例如 440106

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X POST 'https://boot.qingwu.ink/api/v1/auth/register'
  -H 'Accept: application/json'
  -H 'Content-Type: application/json'
  -d '{
       "username": "zhangsan",
       "password": "123456",
       "confirmPassword": "123456",
       "nickname": "张三",
       "email": "zhangsan@example.com",
       "phone": "13800000001"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
409用户名、邮箱或手机号已被占用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1001用户名已被注册
1002邮箱已被注册
1003手机号已被注册
1008两次输入的密码不一致

说明

成功时返回 HTTP 201,code 同步为 201,与普通成功响应区分。
用户名需为 4–20 位字母、数字或下划线;密码 6–20 位。两次密码不一致返回 1008。
注册和登录

登录

校验账号密码并签发令牌。用户名不存在与密码错误返回同一提示,避免账号被枚举。

POST /api/v1/auth/login 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
LoginVO
所属模块
注册和登录

请求体字段

字段类型必填说明
usernamestring必填用户名 例如 admin
passwordstring必填密码 例如 admin123

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X POST 'https://boot.qingwu.ink/api/v1/auth/login'
  -H 'Accept: application/json'
  -H 'Content-Type: application/json'
  -d '{
       "username": "admin",
       "password": "admin123"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "登录成功",
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwidXNlcm5hbWUiOiJhZG1pbiJ9.SIGNATURE",
    "refreshToken": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwidHlwZSI6InJlZnJlc2gifQ.SIGNATURE",
    "tokenType": "Bearer",
    "expiresIn": 7200,
    "user": {
      "id": 1,
      "username": "admin",
      "nickname": "系统管理员",
      "email": "admin@example.com",
      "phone": "13800000000",
      "avatar": null,
      "gender": 1,
      "birthday": null,
      "provinceId": 110000,
      "provinceName": "北京市",
      "cityId": 110100,
      "cityName": "市辖区",
      "districtId": 110105,
      "districtName": "朝阳区",
      "signature": "保持简洁",
      "role": "ADMIN",
      "status": 1,
      "lastLoginTime": "2026-10-16 09:23:12",
      "createTime": "2026-10-16 08:59:41"
    }
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 LoginVO

字段类型说明
accessTokenstring访问令牌,后续请求放入 Authorization 请求头
refreshTokenstring刷新令牌,用于换取新的 accessToken
tokenTypestring令牌类型 例如 Bearer
expiresInintegeraccessToken 有效期(秒) 例如 7200
userUserVO—
user.idinteger用户 ID 例如 1
user.usernamestring用户名 例如 admin
user.nicknamestring昵称 例如 系统管理员
user.emailstring邮箱 例如 admin@example.com
user.phonestring手机号 例如 13800000000
user.avatarstring头像 URL
user.genderinteger性别:0-未知 1-男 2-女 例如 1
user.birthdaystring生日
user.provinceIdinteger省份 ID 例如 110000
user.provinceNamestring省份名称 例如 北京市
user.cityIdinteger城市 ID 例如 110100
user.cityNamestring城市名称 例如 市辖区
user.districtIdinteger区县 ID 例如 110105
user.districtNamestring区县名称 例如 朝阳区
user.addressstring详细地址
user.signaturestring个性签名
user.rolestring角色 例如 ADMIN
user.statusinteger状态:1-正常 0-禁用 例如 1
user.lastLoginTimestring最近登录时间
user.createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1005用户名或密码错误
1006账号已被禁用,请联系管理员

说明

账号被禁用时返回 1006,不会签发令牌。
登录成功会同时更新 lastLoginTime 与 lastLoginIp。
注册和登录

刷新令牌

用尚未过期的 refreshToken 换取一对新令牌,适用于 accessToken 即将到期时静默续期。

POST /api/v1/auth/refresh 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
LoginVO
所属模块
注册和登录

请求体字段

字段类型必填说明
refreshTokenstring必填—

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X POST 'https://boot.qingwu.ink/api/v1/auth/refresh'
  -H 'Accept: application/json'
  -H 'Content-Type: application/json'
  -d '{
       "refreshToken": "eyJhbGciOiJIUzI1NiJ9...SIGNATURE"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiJ9...NEW",
    "refreshToken": "eyJhbGciOiJIUzI1NiJ9...NEW",
    "tokenType": "Bearer",
    "expiresIn": 7200,
    "user": {
      "id": 1,
      "username": "admin",
      "nickname": "系统管理员",
      "email": "admin@example.com",
      "phone": "13800000000",
      "avatar": null,
      "gender": 1,
      "birthday": null,
      "provinceId": 110000,
      "provinceName": "北京市",
      "cityId": 110100,
      "cityName": "市辖区",
      "districtId": 110105,
      "districtName": "朝阳区",
      "signature": "保持简洁",
      "role": "ADMIN",
      "status": 1,
      "lastLoginTime": "2026-10-16 09:23:12",
      "createTime": "2026-10-16 08:59:41"
    }
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 LoginVO

字段类型说明
accessTokenstring访问令牌,后续请求放入 Authorization 请求头
refreshTokenstring刷新令牌,用于换取新的 accessToken
tokenTypestring令牌类型 例如 Bearer
expiresInintegeraccessToken 有效期(秒) 例如 7200
userUserVO—
user.idinteger用户 ID 例如 1
user.usernamestring用户名 例如 admin
user.nicknamestring昵称 例如 系统管理员
user.emailstring邮箱 例如 admin@example.com
user.phonestring手机号 例如 13800000000
user.avatarstring头像 URL
user.genderinteger性别:0-未知 1-男 2-女 例如 1
user.birthdaystring生日
user.provinceIdinteger省份 ID 例如 110000
user.provinceNamestring省份名称 例如 北京市
user.cityIdinteger城市 ID 例如 110100
user.cityNamestring城市名称 例如 市辖区
user.districtIdinteger区县 ID 例如 110105
user.districtNamestring区县名称 例如 朝阳区
user.addressstring详细地址
user.signaturestring个性签名
user.rolestring角色 例如 ADMIN
user.statusinteger状态:1-正常 0-禁用 例如 1
user.lastLoginTimestring最近登录时间
user.createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1009Token 无效
1010Token 已过期,请重新登录

说明

传入 accessToken 会被拒绝并返回 1009,此接口只接受 refreshToken。
注册和登录

退出登录

服务端不维护会话状态,此接口供客户端统一调用;清除本地令牌即完成登出。

POST /api/v1/auth/logout 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
基本类型 / 空值
所属模块
注册和登录

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/auth/logout'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "已退出登录",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1009Token 无效
1010Token 已过期,请重新登录

说明

如需「退出即失效 / 强制下线」,可在网关或服务端引入令牌黑名单。
注册和登录

连通性探测

最轻量的探活接口,不需要令牌,可用于登录页判断服务可达性。

GET /api/v1/auth/ping 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
注册和登录

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/auth/ping'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": "pong",
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

该接口为公开接口,无需任何凭证即可调用。
个人信息

当前用户

返回令牌所属用户的完整资料,含地区名称等派生字段。

GET /api/v1/users/me 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
个人信息

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/me'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

修改个人资料

按字段增量更新。只需提交要变更的字段,未提交的字段保持原值。

PUT /api/v1/users/me 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
个人信息

请求体字段

字段类型必填说明
nicknamestring可选昵称 例如 张三
emailstring可选邮箱 例如 zhangsan@example.com
phonestring可选手机号 例如 13800000001
avatarstring可选头像 URL
genderinteger可选性别:0-未知 1-男 2-女 例如 1
birthdaystring可选生日 例如 1995-06-01
provinceIdinteger可选省份 ID 例如 440000
cityIdinteger可选城市 ID 例如 440100
districtIdinteger可选区县 ID 例如 440106
addressstring可选详细地址
signaturestring可选个性签名

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/users/me'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "nickname": "张三",
       "email": "zhangsan@example.com",
       "gender": 1,
       "birthday": "1995-06-01",
       "provinceId": 440000,
       "cityId": 440100,
       "districtId": 440106,
       "signature": "保持简洁"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "资料已更新",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
邮箱与手机号需全局唯一,冲突时分别返回 1002 / 1003。
个人信息

修改头像

单独更新头像地址,通常传入文件上传接口返回的 URL。

PUT /api/v1/users/me/avatar 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
个人信息

请求体字段

字段类型必填说明
avatarstring必填—

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/users/me/avatar'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "avatar": "/uploads/avatar/2026/10/16/9f3c1a2b7e.png"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "头像已更新",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
字段校验在进入业务逻辑之前完成,未通过时 message 会聚合全部字段的错误提示。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

修改密码

校验原密码后写入新的 BCrypt 哈希。新旧密码相同时会被拒绝。

PUT /api/v1/users/me/password 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
个人信息

请求体字段

字段类型必填说明
oldPasswordstring必填原密码 例如 123456
newPasswordstring必填新密码:6-20 位 例如 abc123456
confirmPasswordstring必填确认新密码 例如 abc123456

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/users/me/password'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "oldPassword": "123456",
       "newPassword": "abc123456",
       "confirmPassword": "abc123456"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "密码修改成功",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1005用户名或密码错误
1007原密码不正确
1008两次输入的密码不一致

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
原密码错误返回 1007;两次新密码不一致返回 1008。
个人信息

我的收藏

分页返回当前用户收藏的新闻,按收藏时间倒序,结果中的 favorited 恒为 true。

GET /api/v1/users/me/favorites 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<NewsVO>
所属模块
个人信息

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/me/favorites?pageNum=1&pageSize=10'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 12,
    "pages": 3,
    "list": [
      {
        "id": 4,
        "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
        "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
        "coverImage": null,
        "author": "编辑部",
        "source": "清吾资讯",
        "categoryId": 2,
        "categoryName": "财经金融",
        "tags": [
          "A股",
          "股市"
        ],
        "viewCount": 2155,
        "likeCount": 143,
        "commentCount": 0,
        "isTop": 1,
        "isHot": 1,
        "status": 1,
        "publishTime": "2026-10-16 08:54:41",
        "favorited": false
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<NewsVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<NewsVO>当前页的数据集合
list.idinteger新闻 ID 例如 1
list.titlestring标题
list.summarystring摘要
list.coverImagestring封面图
list.authorstring作者
list.sourcestring来源
list.categoryIdinteger分类 ID 例如 3
list.categoryNamestring分类名称 例如 科技互联网
list.tagsarray<string>标签列表
list.viewCountinteger浏览量 例如 1024
list.likeCountinteger点赞数 例如 58
list.commentCountinteger评论数 例如 12
list.isTopinteger是否置顶:1-是 0-否
list.isHotinteger是否热门:1-是 0-否
list.statusinteger状态:0-草稿 1-已发布 2-已下架
list.publishTimestring发布时间
list.favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
分页从第 1 页开始,pageSize 上限 100、超出会被下取;total 是满足条件的记录总数,与当前页长度无关。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

收藏新闻

把一条新闻加入当前用户的收藏夹。重复收藏返回 3005。

POST /api/v1/users/me/favorites/{newsId} 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
基本类型 / 空值
所属模块
个人信息

查询与路径参数

参数类型必填说明
newsIdinteger必填新闻 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/users/me/favorites/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "收藏成功",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

取消收藏

移出收藏夹。若原本未收藏则返回 3006。

DELETE /api/v1/users/me/favorites/{newsId} 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
个人信息

查询与路径参数

参数类型必填说明
newsIdinteger必填新闻 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/users/me/favorites/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "已取消收藏",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

收藏状态

查询指定新闻是否已被当前用户收藏,适合详情页按钮初始化。

GET /api/v1/users/me/favorites/{newsId}/status 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
个人信息

查询与路径参数

参数类型必填说明
newsIdinteger必填新闻 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/me/favorites/1/status'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": true,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

我的评论

分页返回当前用户发表过的评论,按时间倒序。

GET /api/v1/users/me/comments 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<CommentVO>
所属模块
个人信息

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/me/comments?pageNum=1&pageSize=10'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 6,
    "pages": 2,
    "list": [
      {
        "id": 1,
        "newsId": 4,
        "userId": 2,
        "nickname": "演示用户",
        "avatar": null,
        "parentId": 0,
        "replyToNickname": null,
        "content": "数据比预期更稳健。",
        "likeCount": 0,
        "createTime": "2026-10-16 09:31:07",
        "children": [
          {
            "id": 2,
            "newsId": 4,
            "userId": 1,
            "nickname": "系统管理员",
            "avatar": null,
            "parentId": 1,
            "replyToNickname": "演示用户",
            "content": "同意,后续走势值得持续观察。",
            "likeCount": 0,
            "createTime": "2026-10-16 09:32:44",
            "children": []
          }
        ]
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<CommentVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<CommentVO>当前页的数据集合
list.idinteger评论 ID
list.newsIdinteger新闻 ID
list.userIdinteger评论用户 ID
list.nicknamestring评论用户昵称
list.avatarstring评论用户头像
list.parentIdinteger父评论 ID,0 表示一级评论
list.replyToNicknamestring被回复用户昵称
list.contentstring评论内容
list.likeCountinteger点赞数
list.createTimestring评论时间
list.childrenarray<CommentVO>子回复列表

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
分页从第 1 页开始,pageSize 上限 100、超出会被下取;total 是满足条件的记录总数,与当前页长度无关。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

我的统计

个人维度的计数信息,当前包含收藏总数。

GET /api/v1/users/me/statistics 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserStatisticsVO
所属模块
个人信息

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/me/statistics'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "favoriteCount": 12
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserStatisticsVO

字段类型说明
favoriteCountinteger收藏的新闻数量

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
个人信息

注销账号

永久删除当前账号及其收藏记录,该操作不可撤销。

DELETE /api/v1/users/me 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
个人信息

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/users/me'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "账号已注销",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

个人中心接口作用于当前令牌所属的用户,无需在路径中传用户 ID。
需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
用户管理

用户列表

管理端分页检索用户,支持按用户名、昵称、邮箱、手机号关键词及角色、状态过滤。

GET /api/v1/users 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<UserVO>
所属模块
用户管理

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10
keywordstring可选关键词,模糊匹配
rolestring可选角色,取值为 USER 或 ADMIN
statusinteger可选状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/users'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 2,
    "pages": 1,
    "list": [
      {
        "id": 1,
        "username": "admin",
        "nickname": "系统管理员",
        "email": "admin@example.com",
        "phone": "13800000000",
        "avatar": null,
        "gender": 1,
        "birthday": null,
        "provinceId": 110000,
        "provinceName": "北京市",
        "cityId": 110100,
        "cityName": "市辖区",
        "districtId": 110105,
        "districtName": "朝阳区",
        "signature": "保持简洁",
        "role": "ADMIN",
        "status": 1,
        "lastLoginTime": "2026-10-16 09:23:12",
        "createTime": "2026-10-16 08:59:41"
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<UserVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<UserVO>当前页的数据集合
list.idinteger用户 ID 例如 1
list.usernamestring用户名 例如 admin
list.nicknamestring昵称 例如 系统管理员
list.emailstring邮箱 例如 admin@example.com
list.phonestring手机号 例如 13800000000
list.avatarstring头像 URL
list.genderinteger性别:0-未知 1-男 2-女 例如 1
list.birthdaystring生日
list.provinceIdinteger省份 ID 例如 110000
list.provinceNamestring省份名称 例如 北京市
list.cityIdinteger城市 ID 例如 110100
list.cityNamestring城市名称 例如 市辖区
list.districtIdinteger区县 ID 例如 110105
list.districtNamestring区县名称 例如 朝阳区
list.addressstring详细地址
list.signaturestring个性签名
list.rolestring角色 例如 ADMIN
list.statusinteger状态:1-正常 0-禁用 例如 1
list.lastLoginTimestring最近登录时间
list.createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

本组接口需要管理员角色,普通用户访问会返回 403。
分页从第 1 页开始,pageSize 上限 100、超出会被下取;total 是满足条件的记录总数,与当前页长度无关。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
用户管理

查询用户公开信息

按用户 ID 查询公开资料,无需登录。返回字段与个人中心一致。

GET /api/v1/users/{id} 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
用户管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/users/1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1004用户不存在

说明

本组接口需要管理员角色,普通用户访问会返回 403。
用户不存在时返回 1004 与 HTTP 404。
用户管理

修改用户角色

在 USER 与 ADMIN 之间切换角色,取值不合法时返回 400。

PUT /api/v1/users/{id}/role 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
用户管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID
rolestring必填角色,取值为 USER 或 ADMIN

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/users/1/role'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1004用户不存在
1011该操作需要管理员权限

说明

本组接口需要管理员角色,普通用户访问会返回 403。
不能把当前登录账号降级为普通用户。
用户管理

启用或禁用用户

status = 1 启用,status = 0 禁用。被禁用的账号无法登录,但数据保留。

PUT /api/v1/users/{id}/status 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
UserVO
所属模块
用户管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID
statusinteger必填状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/users/1/status?status=1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "username": "admin",
    "nickname": "系统管理员",
    "email": "admin@example.com",
    "phone": "13800000000",
    "avatar": null,
    "gender": 1,
    "birthday": null,
    "provinceId": 110000,
    "provinceName": "北京市",
    "cityId": 110100,
    "cityName": "市辖区",
    "districtId": 110105,
    "districtName": "朝阳区",
    "signature": "保持简洁",
    "role": "ADMIN",
    "status": 1,
    "lastLoginTime": "2026-10-16 09:23:12",
    "createTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UserVO

字段类型说明
idinteger用户 ID 例如 1
usernamestring用户名 例如 admin
nicknamestring昵称 例如 系统管理员
emailstring邮箱 例如 admin@example.com
phonestring手机号 例如 13800000000
avatarstring头像 URL
genderinteger性别:0-未知 1-男 2-女 例如 1
birthdaystring生日
provinceIdinteger省份 ID 例如 110000
provinceNamestring省份名称 例如 北京市
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 市辖区
districtIdinteger区县 ID 例如 110105
districtNamestring区县名称 例如 朝阳区
addressstring详细地址
signaturestring个性签名
rolestring角色 例如 ADMIN
statusinteger状态:1-正常 0-禁用 例如 1
lastLoginTimestring最近登录时间
createTimestring注册时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1004用户不存在

说明

本组接口需要管理员角色,普通用户访问会返回 403。
不能禁用当前登录账号,否则返回 400。
用户管理

删除用户

管理端删除指定用户,不可撤销。

DELETE /api/v1/users/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
用户管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/users/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "用户已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
1004用户不存在

说明

本组接口需要管理员角色,普通用户访问会返回 403。
不能删除当前登录账号。
省市区

获取全部省份

返回 34 个省级行政区,已按排序值排好序,可直接用于下拉框。

GET /api/v1/regions/provinces 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
省市区

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/provinces'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 110000,
      "parentId": 0,
      "name": "北京市",
      "shortName": "京",
      "level": 1,
      "code": "110000",
      "pinyin": "beijingshi",
      "sort": 1,
      "status": 1
    },
    {
      "id": 440000,
      "parentId": 0,
      "name": "广东省",
      "shortName": "粤",
      "level": 1,
      "code": "440000",
      "pinyin": "guangdongsheng",
      "sort": 19,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

该接口为公开接口,无需任何凭证即可调用。
省市区

获取省份下的城市

返回指定省份的全部地级行政区,用于省 → 市级联的第二步。

GET /api/v1/regions/cities 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
省市区

查询与路径参数

参数类型必填说明
provinceIdinteger必填省份 ID,如 440000

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/cities?provinceId=1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440300,
      "parentId": 440000,
      "name": "深圳市",
      "shortName": null,
      "level": 2,
      "code": "440300",
      "areaCode": null,
      "pinyin": "shenzhenshi",
      "sort": 3,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

该接口为公开接口,无需任何凭证即可调用。
省市区

获取城市下的区县

返回指定城市的全部区县级行政区,用于市 → 区县级联的第三步。

GET /api/v1/regions/districts 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
省市区

查询与路径参数

参数类型必填说明
cityIdinteger必填城市 ID,如 440300

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/districts?cityId=1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440303,
      "parentId": 440300,
      "name": "罗湖区",
      "level": 3,
      "code": "440303",
      "pinyin": "luohuqu",
      "sort": 1,
      "status": 1
    },
    {
      "id": 440304,
      "parentId": 440300,
      "name": "福田区",
      "level": 3,
      "code": "440304",
      "pinyin": "futianqu",
      "sort": 2,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

区县数据覆盖 4 个直辖市、全部省会与首府、计划单列市及主要城市;其余城市返回空数组,可按同一格式补充。
省市区

按上级查询下级

通用级联接口,parentId 传 0 即返回全部省级行政区,无需关心层级语义。

GET /api/v1/regions/children 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
省市区

查询与路径参数

参数类型必填说明
parentIdinteger可选上级地区 ID,顶级传 0 例如 0

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/children?parentId=0'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440300,
      "parentId": 440000,
      "name": "深圳市",
      "shortName": null,
      "level": 2,
      "code": "440300",
      "areaCode": null,
      "pinyin": "shenzhenshi",
      "sort": 3,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

该接口为公开接口,无需任何凭证即可调用。
省市区

获取地区树

一次性返回省—市—区县三级嵌套结构,适合离线渲染整棵级联树。

GET /api/v1/regions/tree 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<RegionTreeVO>
所属模块
省市区

查询与路径参数

参数类型必填说明
parentIdinteger可选上级地区 ID,顶级传 0 例如 0
depthinteger可选树形展开深度,1–3,默认 3 例如 3

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/tree?parentId=0&depth=3'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440000,
      "parentId": 0,
      "name": "广东省",
      "shortName": "粤",
      "level": 1,
      "code": "440000",
      "pinyin": "guangdongsheng",
      "children": [
        {
          "id": 440300,
          "parentId": 440000,
          "name": "深圳市",
          "level": 2,
          "code": "440300",
          "pinyin": "shenzhenshi",
          "children": [
            {
              "id": 440303,
              "parentId": 440300,
              "name": "罗湖区",
              "level": 3,
              "code": "440303",
              "pinyin": "luohuqu",
              "children": []
            }
          ]
        }
      ]
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<RegionTreeVO>

字段类型说明
idinteger地区 ID 例如 110000
parentIdinteger上级地区 ID 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码 例如 110000
pinyinstring拼音
childrenarray<RegionTreeVO>子节点

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

depth 最大为 3。数据量较大时建议改用逐级查询接口,减少单次响应体积。
省市区

搜索地区

按中文名称、拼音或简称模糊匹配。拼音搜索可让用户输入 shenzhen 直接命中「深圳市」。

GET /api/v1/regions/search 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
省市区

查询与路径参数

参数类型必填说明
keywordstring必填关键词,模糊匹配
limitinteger可选返回条数上限 例如 20

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/search?limit=20'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440300,
      "parentId": 440000,
      "name": "深圳市",
      "shortName": null,
      "level": 2,
      "code": "440300",
      "areaCode": null,
      "pinyin": "shenzhenshi",
      "sort": 3,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

匹配范围包含 name、pinyin 与 shortName 三个字段,因此「粤」「guangdong」也能命中广东省。
省市区

查询地区详情

按地区 ID 返回单条行政区划记录。地区 ID 即国家行政区划代码。

GET /api/v1/regions/{id} 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
Region
所属模块
省市区

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 440300,
    "parentId": 440000,
    "name": "深圳市",
    "shortName": null,
    "level": 2,
    "code": "440300",
    "areaCode": null,
    "pinyin": "shenzhenshi",
    "sort": 3,
    "status": 1
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 Region

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

地区不存在时返回 2001 与 HTTP 404。
省市区

查询地区完整路径

自顶向下回溯出「省 / 市 / 区县」链路,用于面包屑或地址回显。

GET /api/v1/regions/{id}/path 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
RegionPathVO
所属模块
省市区

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/regions/1/path'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 110105,
    "fullName": "北京市/市辖区/朝阳区",
    "path": [
      {
        "id": 110000,
        "parentId": 0,
        "name": "北京市",
        "level": 1,
        "code": "110000"
      },
      {
        "id": 110100,
        "parentId": 110000,
        "name": "市辖区",
        "level": 2,
        "code": "110100"
      },
      {
        "id": 110105,
        "parentId": 110100,
        "name": "朝阳区",
        "level": 3,
        "code": "110105"
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 RegionPathVO

字段类型说明
idinteger地区 ID 例如 110105
fullNamestring完整路径名称 例如 北京市/市辖区/朝阳区
patharray<RegionTreeVO>自顶向下的地区链路
path.idinteger地区 ID 例如 110000
path.parentIdinteger上级地区 ID 例如 0
path.namestring地区名称 例如 北京市
path.shortNamestring简称 例如 京
path.levelinteger层级:1-省 2-市 3-区县 例如 1
path.codestring行政区划代码 例如 110000
path.pinyinstring拼音
path.childrenarray<RegionTreeVO>子节点

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

该接口为公开接口,无需任何凭证即可调用。
省市区

新增地区

管理端新增行政区划。id 必须提供行政区划代码,层级需与上级严格对应。

POST /api/v1/regions 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
Region
所属模块
省市区

请求体字段

字段类型必填说明
idinteger可选地区 ID(行政区划代码),新增必填 例如 110000
parentIdinteger必填上级地区 ID,顶级填 0 例如 0
namestring必填地区名称 例如 北京市
shortNamestring可选简称 例如 京
levelinteger必填层级:1-省 2-市 3-区县 例如 1
zipCodestring可选邮政编码
areaCodestring可选电话区号 例如 010
lngnumber可选经度 例如 116.407526
latnumber可选纬度 例如 39.90403
pinyinstring可选拼音
sortinteger可选排序值 例如 1
statusinteger可选状态:1-启用 0-停用 例如 1

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/regions'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "id": 123456,
       "parentId": 120000,
       "name": "示例区",
       "level": 3,
       "areaCode": "022",
       "sort": 1
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 440300,
    "parentId": 440000,
    "name": "深圳市",
    "shortName": null,
    "level": 2,
    "code": "440300",
    "areaCode": null,
    "pinyin": "shenzhenshi",
    "sort": 3,
    "status": 1
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 Region

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

层级不匹配(如省级下面挂市级以外的层级)返回 2002;ID 冲突返回 409。
省市区

修改地区

更新地区名称、简称、区号、经纬度、拼音与排序等字段,id 本身不可修改。

PUT /api/v1/regions/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
Region
所属模块
省市区

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求体字段

字段类型必填说明
idinteger可选地区 ID(行政区划代码),新增必填 例如 110000
parentIdinteger必填上级地区 ID,顶级填 0 例如 0
namestring必填地区名称 例如 北京市
shortNamestring可选简称 例如 京
levelinteger必填层级:1-省 2-市 3-区县 例如 1
zipCodestring可选邮政编码
areaCodestring可选电话区号 例如 010
lngnumber可选经度 例如 116.407526
latnumber可选纬度 例如 39.90403
pinyinstring可选拼音
sortinteger可选排序值 例如 1
statusinteger可选状态:1-启用 0-停用 例如 1

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/regions/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "parentId": 440000,
       "name": "深圳市",
       "level": 2,
       "pinyin": "shenzhenshi",
       "sort": 3
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "地区已更新",
  "data": {
    "id": 440300,
    "parentId": 440000,
    "name": "深圳市",
    "shortName": null,
    "level": 2,
    "code": "440300",
    "areaCode": null,
    "pinyin": "shenzhenshi",
    "sort": 3,
    "status": 1
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 Region

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

字段校验在进入业务逻辑之前完成,未通过时 message 会聚合全部字段的错误提示。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
省市区

删除地区

删除叶子节点。存在下级地区时会被拒绝,避免出现悬挂的父级引用。

DELETE /api/v1/regions/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
省市区

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/regions/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "地区已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
2001地区不存在
2002地区层级不正确
2003该地区下存在子区域,无法删除

说明

存在子区域时返回 2003 与 HTTP 409。
新闻接口

新闻列表

前台分页检索,只返回已发布内容。支持分类、关键词、标签、热门、置顶与时间区间组合筛选。

GET /api/v1/news 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<NewsVO>
所属模块
新闻接口

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10
categoryIdinteger可选新闻分类 ID 例如 3
keywordstring可选关键词,模糊匹配 例如 大模型
tagstring可选标签,匹配 tags 字段 例如 AI
statusinteger可选状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架
isHotinteger可选是否只查热门:1-是 例如 1
isTopinteger可选是否只查置顶:1-是
startTimestring可选开始时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
endTimestring可选结束时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
orderBystring可选排序方式:latest 最新 / hot 浏览量 / like 点赞 / comment 评论 例如 latest

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 25,
    "pages": 5,
    "list": [
      {
        "id": 4,
        "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
        "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
        "coverImage": null,
        "author": "编辑部",
        "source": "清吾资讯",
        "categoryId": 2,
        "categoryName": "财经金融",
        "tags": [
          "A股",
          "股市"
        ],
        "viewCount": 2155,
        "likeCount": 143,
        "commentCount": 0,
        "isTop": 1,
        "isHot": 1,
        "status": 1,
        "publishTime": "2026-10-16 08:54:41",
        "favorited": false
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<NewsVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<NewsVO>当前页的数据集合
list.idinteger新闻 ID 例如 1
list.titlestring标题
list.summarystring摘要
list.coverImagestring封面图
list.authorstring作者
list.sourcestring来源
list.categoryIdinteger分类 ID 例如 3
list.categoryNamestring分类名称 例如 科技互联网
list.tagsarray<string>标签列表
list.viewCountinteger浏览量 例如 1024
list.likeCountinteger点赞数 例如 58
list.commentCountinteger评论数 例如 12
list.isTopinteger是否置顶:1-是 0-否
list.isHotinteger是否热门:1-是 0-否
list.statusinteger状态:0-草稿 1-已发布 2-已下架
list.publishTimestring发布时间
list.favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

携带合法令牌时,每条记录会带上 favorited,可直接用于渲染收藏按钮。
orderBy 可选 latest、hot、like、comment;置顶内容始终排在最前。
新闻接口

新闻详情

返回正文、上下篇导航与相关推荐,同时把浏览量原子加一。

GET /api/v1/news/{id} 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
NewsDetailVO
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 4,
    "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
    "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
    "coverImage": null,
    "author": "编辑部",
    "source": "清吾资讯",
    "categoryId": 2,
    "categoryName": "财经金融",
    "tags": [
      "A股",
      "股市"
    ],
    "viewCount": 2156,
    "likeCount": 143,
    "commentCount": 0,
    "isTop": 1,
    "isHot": 1,
    "status": 1,
    "publishTime": "2026-10-16 08:54:41",
    "favorited": false,
    "content": "<h2>A 股三大指数集体收涨 成交额突破 1.2 万亿</h2><p>市场情绪回暖……</p>",
    "prevId": null,
    "prevTitle": null,
    "nextId": 5,
    "nextTitle": "央行开展 5000 亿元 MLF 操作 利率维持不变",
    "liked": false
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsDetailVO

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)
contentstring正文内容
prevIdinteger上一篇新闻 ID,无则为 null
prevTitlestring上一篇新闻标题
nextIdinteger下一篇新闻 ID,无则为 null
nextTitlestring下一篇新闻标题
likedboolean当前登录用户是否已点赞(示例字段,可按业务接入点赞记录表)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

浏览量采用 UPDATE ... SET view_count = view_count + 1 原子自增,并发安全。
新闻不存在或已下架返回 3001 与 HTTP 404。
新闻接口

热门新闻

按置顶与浏览量降序返回热点内容,适合首页榜单。

GET /api/v1/news/hot 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<NewsVO>
所属模块
新闻接口

查询与路径参数

参数类型必填说明
limitinteger可选返回条数上限 例如 10

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/hot?limit=10'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 4,
      "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
      "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
      "coverImage": null,
      "author": "编辑部",
      "source": "清吾资讯",
      "categoryId": 2,
      "categoryName": "财经金融",
      "tags": [
        "A股",
        "股市"
      ],
      "viewCount": 2155,
      "likeCount": 143,
      "commentCount": 0,
      "isTop": 1,
      "isHot": 1,
      "status": 1,
      "publishTime": "2026-10-16 08:54:41",
      "favorited": false
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<NewsVO>

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

该接口为公开接口,无需任何凭证即可调用。
新闻接口

最新新闻

按发布时间降序返回最新内容,适合资讯流首屏。

GET /api/v1/news/latest 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<NewsVO>
所属模块
新闻接口

查询与路径参数

参数类型必填说明
limitinteger可选返回条数上限 例如 10

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/latest?limit=10'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 4,
      "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
      "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
      "coverImage": null,
      "author": "编辑部",
      "source": "清吾资讯",
      "categoryId": 2,
      "categoryName": "财经金融",
      "tags": [
        "A股",
        "股市"
      ],
      "viewCount": 2155,
      "likeCount": 143,
      "commentCount": 0,
      "isTop": 1,
      "isHot": 1,
      "status": 1,
      "publishTime": "2026-10-16 08:54:41",
      "favorited": false
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<NewsVO>

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

该接口为公开接口,无需任何凭证即可调用。
新闻接口

相关新闻

返回同分类下的其他已发布新闻,按浏览量降序,可用于详情页底部推荐。

GET /api/v1/news/{id}/related 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<NewsVO>
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID
limitinteger可选返回条数上限 例如 5

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/1/related?limit=5'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 4,
      "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
      "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
      "coverImage": null,
      "author": "编辑部",
      "source": "清吾资讯",
      "categoryId": 2,
      "categoryName": "财经金融",
      "tags": [
        "A股",
        "股市"
      ],
      "viewCount": 2155,
      "likeCount": 143,
      "commentCount": 0,
      "isTop": 1,
      "isHot": 1,
      "status": 1,
      "publishTime": "2026-10-16 08:54:41",
      "favorited": false
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<NewsVO>

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

该接口为公开接口,无需任何凭证即可调用。
新闻接口

评论列表

返回树形评论结构:一级评论按时间正序排列,其下的回复挂在 children 中。

GET /api/v1/news/{id}/comments 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<CommentVO>
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/1/comments'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 1,
      "newsId": 4,
      "userId": 2,
      "nickname": "演示用户",
      "avatar": null,
      "parentId": 0,
      "replyToNickname": null,
      "content": "数据比预期更稳健。",
      "likeCount": 0,
      "createTime": "2026-10-16 09:31:07",
      "children": [
        {
          "id": 2,
          "newsId": 4,
          "userId": 1,
          "nickname": "系统管理员",
          "avatar": null,
          "parentId": 1,
          "replyToNickname": "演示用户",
          "content": "同意,后续走势值得持续观察。",
          "likeCount": 0,
          "createTime": "2026-10-16 09:32:44",
          "children": []
        }
      ]
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<CommentVO>

字段类型说明
idinteger评论 ID
newsIdinteger新闻 ID
userIdinteger评论用户 ID
nicknamestring评论用户昵称
avatarstring评论用户头像
parentIdinteger父评论 ID,0 表示一级评论
replyToNicknamestring被回复用户昵称
contentstring评论内容
likeCountinteger点赞数
createTimestring评论时间
childrenarray<CommentVO>子回复列表

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

该接口为公开接口,无需任何凭证即可调用。
新闻接口

发表评论

发表评论或回复。parentId 传 0 为一级评论,传其他评论 ID 即为回复。

POST /api/v1/news/{id}/comments 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
CommentVO
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求体字段

字段类型必填说明
contentstring必填评论内容
parentIdinteger可选父评论 ID,0 表示一级评论

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/news/1/comments'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "content": "数据比预期更稳健。",
       "parentId": 0
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 1,
    "newsId": 4,
    "userId": 2,
    "nickname": "演示用户",
    "avatar": null,
    "parentId": 0,
    "replyToNickname": null,
    "content": "数据比预期更稳健。",
    "likeCount": 0,
    "createTime": "2026-10-16 09:31:07",
    "children": [
      {
        "id": 2,
        "newsId": 4,
        "userId": 1,
        "nickname": "系统管理员",
        "avatar": null,
        "parentId": 1,
        "replyToNickname": "演示用户",
        "content": "同意,后续走势值得持续观察。",
        "likeCount": 0,
        "createTime": "2026-10-16 09:32:44",
        "children": []
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 CommentVO

字段类型说明
idinteger评论 ID
newsIdinteger新闻 ID
userIdinteger评论用户 ID
nicknamestring评论用户昵称
avatarstring评论用户头像
parentIdinteger父评论 ID,0 表示一级评论
replyToNicknamestring被回复用户昵称
contentstring评论内容
likeCountinteger点赞数
createTimestring评论时间
childrenarray<CommentVO>子回复列表

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

成功时返回 HTTP 201,并同步把新闻的 commentCount 加一。
新闻接口

删除评论

删除自己的评论;管理员可删除任意评论。删除一级评论会连带删除其下全部回复。

DELETE /api/v1/news/comments/{commentId} 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
新闻接口

查询与路径参数

参数类型必填说明
commentIdinteger必填评论 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/news/comments/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "评论已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

删除后会自动回退新闻的 commentCount,不会出现计数漂移。
新闻接口

点赞

为新闻点赞,返回递增后的最新点赞数。

POST /api/v1/news/{id}/like 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
基本类型 / 空值
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/news/1/like'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "点赞成功",
  "data": 144,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
新闻接口

取消点赞

取消点赞,返回递减后的最新点赞数。计数不会小于 0。

DELETE /api/v1/news/{id}/like 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
新闻接口

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/news/1/like'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "已取消点赞",
  "data": 143,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
资讯管理

新闻列表(管理端)

与前台列表参数一致,但可额外通过 status 查询草稿与已下架内容。

GET /api/v1/news/manage 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<NewsVO>
所属模块
资讯管理

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10
categoryIdinteger可选新闻分类 ID 例如 3
keywordstring可选关键词,模糊匹配 例如 大模型
tagstring可选标签,匹配 tags 字段 例如 AI
statusinteger可选状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架
isHotinteger可选是否只查热门:1-是 例如 1
isTopinteger可选是否只查置顶:1-是
startTimestring可选开始时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
endTimestring可选结束时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
orderBystring可选排序方式:latest 最新 / hot 浏览量 / like 点赞 / comment 评论 例如 latest

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/news/manage'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 25,
    "pages": 5,
    "list": [
      {
        "id": 4,
        "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
        "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
        "coverImage": null,
        "author": "编辑部",
        "source": "清吾资讯",
        "categoryId": 2,
        "categoryName": "财经金融",
        "tags": [
          "A股",
          "股市"
        ],
        "viewCount": 2155,
        "likeCount": 143,
        "commentCount": 0,
        "isTop": 1,
        "isHot": 1,
        "status": 1,
        "publishTime": "2026-10-16 08:54:41",
        "favorited": false
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<NewsVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<NewsVO>当前页的数据集合
list.idinteger新闻 ID 例如 1
list.titlestring标题
list.summarystring摘要
list.coverImagestring封面图
list.authorstring作者
list.sourcestring来源
list.categoryIdinteger分类 ID 例如 3
list.categoryNamestring分类名称 例如 科技互联网
list.tagsarray<string>标签列表
list.viewCountinteger浏览量 例如 1024
list.likeCountinteger点赞数 例如 58
list.commentCountinteger评论数 例如 12
list.isTopinteger是否置顶:1-是 0-否
list.isHotinteger是否热门:1-是 0-否
list.statusinteger状态:0-草稿 1-已发布 2-已下架
list.publishTimestring发布时间
list.favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

本组接口需要管理员角色,普通用户访问会返回 403。
分页从第 1 页开始,pageSize 上限 100、超出会被下取;total 是满足条件的记录总数,与当前页长度无关。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
资讯管理

新增新闻

创建一条新闻。状态为已发布且未指定发布时间时,自动填入当前时间。

POST /api/v1/news 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
NewsVO
所属模块
资讯管理

请求体字段

字段类型必填说明
titlestring必填标题
summarystring可选摘要
contentstring可选正文内容
coverImagestring可选封面图
authorstring可选作者
sourcestring可选来源
categoryIdinteger必填分类 ID
tagsstring可选标签,英文逗号分隔
isTopinteger可选是否置顶:1-是 0-否
isHotinteger可选是否热门:1-是 0-否
statusinteger可选状态:0-草稿 1-已发布 2-已下架
publishTimestring可选发布时间,不传则取当前时间

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/news'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "title": "国产大模型迎来新一轮技术迭代",
       "summary": "多家厂商发布新一代大模型,推理能力与多模态理解显著提升。",
       "content": "<p>正文内容……</p>",
       "categoryId": 3,
       "tags": "AI,大模型",
       "author": "编辑部",
       "source": "清吾资讯",
       "isHot": 1,
       "isTop": 0,
       "status": 1
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 4,
    "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
    "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
    "coverImage": null,
    "author": "编辑部",
    "source": "清吾资讯",
    "categoryId": 2,
    "categoryName": "财经金融",
    "tags": [
      "A股",
      "股市"
    ],
    "viewCount": 2155,
    "likeCount": 143,
    "commentCount": 0,
    "isTop": 1,
    "isHot": 1,
    "status": 1,
    "publishTime": "2026-10-16 08:54:41",
    "favorited": false
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsVO

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

本组接口需要管理员角色,普通用户访问会返回 403。
分类不存在返回 3002。status 取值为 0 草稿、1 已发布、2 已下架。
资讯管理

编辑新闻

全量更新新闻字段,常用于后台编辑器保存。

PUT /api/v1/news/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
NewsVO
所属模块
资讯管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求体字段

字段类型必填说明
titlestring必填标题
summarystring可选摘要
contentstring可选正文内容
coverImagestring可选封面图
authorstring可选作者
sourcestring可选来源
categoryIdinteger必填分类 ID
tagsstring可选标签,英文逗号分隔
isTopinteger可选是否置顶:1-是 0-否
isHotinteger可选是否热门:1-是 0-否
statusinteger可选状态:0-草稿 1-已发布 2-已下架
publishTimestring可选发布时间,不传则取当前时间

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/news/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "title": "string",
       "summary": "string",
       "content": "string",
       "coverImage": "string",
       "author": "string",
       "source": "string",
       "categoryId": 1,
       "tags": "string",
       "isTop": 1,
       "isHot": 1,
       "status": 1,
       "publishTime": "string"
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "新闻已更新",
  "data": {
    "id": 4,
    "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
    "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
    "coverImage": null,
    "author": "编辑部",
    "source": "清吾资讯",
    "categoryId": 2,
    "categoryName": "财经金融",
    "tags": [
      "A股",
      "股市"
    ],
    "viewCount": 2155,
    "likeCount": 143,
    "commentCount": 0,
    "isTop": 1,
    "isHot": 1,
    "status": 1,
    "publishTime": "2026-10-16 08:54:41",
    "favorited": false
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsVO

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

本组接口需要管理员角色,普通用户访问会返回 403。
字段校验在进入业务逻辑之前完成,未通过时 message 会聚合全部字段的错误提示。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
资讯管理

修改新闻状态

在草稿、已发布、已下架之间切换,无需提交完整正文即可上下架。

PUT /api/v1/news/{id}/status 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
NewsVO
所属模块
资讯管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID
statusinteger必填状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/news/1/status?status=1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "状态已更新",
  "data": {
    "id": 4,
    "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
    "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
    "coverImage": null,
    "author": "编辑部",
    "source": "清吾资讯",
    "categoryId": 2,
    "categoryName": "财经金融",
    "tags": [
      "A股",
      "股市"
    ],
    "viewCount": 2155,
    "likeCount": 143,
    "commentCount": 0,
    "isTop": 1,
    "isHot": 1,
    "status": 1,
    "publishTime": "2026-10-16 08:54:41",
    "favorited": false
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsVO

字段类型说明
idinteger新闻 ID 例如 1
titlestring标题
summarystring摘要
coverImagestring封面图
authorstring作者
sourcestring来源
categoryIdinteger分类 ID 例如 3
categoryNamestring分类名称 例如 科技互联网
tagsarray<string>标签列表
viewCountinteger浏览量 例如 1024
likeCountinteger点赞数 例如 58
commentCountinteger评论数 例如 12
isTopinteger是否置顶:1-是 0-否
isHotinteger是否热门:1-是 0-否
statusinteger状态:0-草稿 1-已发布 2-已下架
publishTimestring发布时间
favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

本组接口需要管理员角色,普通用户访问会返回 403。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
资讯管理

删除新闻

逻辑删除,数据仍保留在库中,前台与列表接口均不再返回。

DELETE /api/v1/news/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
资讯管理

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/news/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "新闻已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3001新闻不存在或已下架

说明

本组接口需要管理员角色,普通用户访问会返回 403。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
新闻分类

分类列表

默认只返回启用中的分类;传 all=true 可获取全部(含停用),用于后台管理页。

GET /api/v1/categories 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<NewsCategory>
所属模块
新闻分类

查询与路径参数

参数类型必填说明
allboolean可选是否包含已停用的数据,默认 false 例如 False

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/categories?all=False'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 3,
      "name": "科技互联网",
      "code": "tech",
      "icon": null,
      "description": "科技前沿与互联网动态",
      "sort": 3,
      "status": 1,
      "createTime": "2026-10-16 08:59:41",
      "updateTime": "2026-10-16 08:59:41"
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<NewsCategory>

字段类型说明
createTimestring创建时间
updateTimestring更新时间
idinteger分类 ID 例如 1
namestring分类名称 例如 科技互联网
codestring分类编码 例如 tech
iconstring分类图标
descriptionstring分类描述
sortinteger排序值 例如 1
statusinteger状态:1-启用 0-停用 例如 1

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

该接口为公开接口,无需任何凭证即可调用。
新闻分类

分类详情

按 ID 查询单个分类。

GET /api/v1/categories/{id} 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
NewsCategory
所属模块
新闻分类

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/categories/1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 3,
    "name": "科技互联网",
    "code": "tech",
    "icon": null,
    "description": "科技前沿与互联网动态",
    "sort": 3,
    "status": 1,
    "createTime": "2026-10-16 08:59:41",
    "updateTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsCategory

字段类型说明
createTimestring创建时间
updateTimestring更新时间
idinteger分类 ID 例如 1
namestring分类名称 例如 科技互联网
codestring分类编码 例如 tech
iconstring分类图标
descriptionstring分类描述
sortinteger排序值 例如 1
statusinteger状态:1-启用 0-停用 例如 1

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

分类不存在时返回 3002 与 HTTP 404。
新闻分类

按分类查新闻

等价于在新闻列表中固定 categoryId,其余筛选与分页参数完全一致。

GET /api/v1/categories/{id}/news 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<NewsVO>
所属模块
新闻分类

查询与路径参数

参数类型必填说明
idinteger必填资源 ID
pageNuminteger可选页码,从 1 开始 例如 1
pageSizeinteger可选每页条数,最大 100 例如 10
categoryIdinteger可选新闻分类 ID 例如 3
keywordstring可选关键词,模糊匹配 例如 大模型
tagstring可选标签,匹配 tags 字段 例如 AI
statusinteger可选状态。用户:1 正常 / 0 禁用;新闻:0 草稿 / 1 已发布 / 2 下架
isHotinteger可选是否只查热门:1-是 例如 1
isTopinteger可选是否只查置顶:1-是
startTimestring可选开始时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
endTimestring可选结束时间(yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd)
orderBystring可选排序方式:latest 最新 / hot 浏览量 / like 点赞 / comment 评论 例如 latest

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/categories/1/news'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 5,
    "pages": 1,
    "list": [
      {
        "id": 4,
        "title": "A 股三大指数集体收涨 成交额突破 1.2 万亿",
        "summary": "市场情绪回暖,券商、新能源板块领涨,北向资金净流入超 60 亿元。",
        "coverImage": null,
        "author": "编辑部",
        "source": "清吾资讯",
        "categoryId": 2,
        "categoryName": "财经金融",
        "tags": [
          "A股",
          "股市"
        ],
        "viewCount": 2155,
        "likeCount": 143,
        "commentCount": 0,
        "isTop": 1,
        "isHot": 1,
        "status": 1,
        "publishTime": "2026-10-16 08:54:41",
        "favorited": false
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<NewsVO>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<NewsVO>当前页的数据集合
list.idinteger新闻 ID 例如 1
list.titlestring标题
list.summarystring摘要
list.coverImagestring封面图
list.authorstring作者
list.sourcestring来源
list.categoryIdinteger分类 ID 例如 3
list.categoryNamestring分类名称 例如 科技互联网
list.tagsarray<string>标签列表
list.viewCountinteger浏览量 例如 1024
list.likeCountinteger点赞数 例如 58
list.commentCountinteger评论数 例如 12
list.isTopinteger是否置顶:1-是 0-否
list.isHotinteger是否热门:1-是 0-否
list.statusinteger状态:0-草稿 1-已发布 2-已下架
list.publishTimestring发布时间
list.favoritedboolean当前登录用户是否已收藏(未登录返回 false)

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

分页从第 1 页开始,pageSize 上限 100、超出会被下取;total 是满足条件的记录总数,与当前页长度无关。
新闻分类

新增分类

创建新闻分类。名称需唯一,重名返回 3003。

POST /api/v1/categories 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
NewsCategory
所属模块
新闻分类

请求体字段

字段类型必填说明
namestring必填分类名称 例如 科技互联网
codestring可选分类编码 例如 tech
iconstring可选分类图标 URL
descriptionstring可选分类描述
sortinteger可选排序值,越小越靠前 例如 1
statusinteger可选状态:1-启用 0-停用 例如 1

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST 'https://boot.qingwu.ink/api/v1/categories'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "name": "科技互联网",
       "code": "tech",
       "description": "科技前沿与互联网动态",
       "sort": 3,
       "status": 1
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "id": 3,
    "name": "科技互联网",
    "code": "tech",
    "icon": null,
    "description": "科技前沿与互联网动态",
    "sort": 3,
    "status": 1,
    "createTime": "2026-10-16 08:59:41",
    "updateTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsCategory

字段类型说明
createTimestring创建时间
updateTimestring更新时间
idinteger分类 ID 例如 1
namestring分类名称 例如 科技互联网
codestring分类编码 例如 tech
iconstring分类图标
descriptionstring分类描述
sortinteger排序值 例如 1
statusinteger状态:1-启用 0-停用 例如 1

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

字段校验在进入业务逻辑之前完成,未通过时 message 会聚合全部字段的错误提示。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
新闻分类

修改分类

更新分类名称、编码、描述、排序与启用状态。

PUT /api/v1/categories/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
application/json
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
NewsCategory
所属模块
新闻分类

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求体字段

字段类型必填说明
namestring必填分类名称 例如 科技互联网
codestring可选分类编码 例如 tech
iconstring可选分类图标 URL
descriptionstring可选分类描述
sortinteger可选排序值,越小越靠前 例如 1
statusinteger可选状态:1-启用 0-停用 例如 1

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X PUT 'https://boot.qingwu.ink/api/v1/categories/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'
  -H 'Content-Type: application/json'
  -d '{
       "name": "科技互联网",
       "code": "tech",
       "icon": "string",
       "description": "string",
       "sort": 1,
       "status": 1
     }'

响应示例

200 OK
{
  "code": 200,
  "message": "分类已更新",
  "data": {
    "id": 3,
    "name": "科技互联网",
    "code": "tech",
    "icon": null,
    "description": "科技前沿与互联网动态",
    "sort": 3,
    "status": 1,
    "createTime": "2026-10-16 08:59:41",
    "updateTime": "2026-10-16 08:59:41"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 NewsCategory

字段类型说明
createTimestring创建时间
updateTimestring更新时间
idinteger分类 ID 例如 1
namestring分类名称 例如 科技互联网
codestring分类编码 例如 tech
iconstring分类图标
descriptionstring分类描述
sortinteger排序值 例如 1
statusinteger状态:1-启用 0-停用 例如 1

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

字段校验在进入业务逻辑之前完成,未通过时 message 会聚合全部字段的错误提示。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。
新闻分类

删除分类

逻辑删除分类。若分类下仍有关联新闻,会被拒绝并提示剩余数量。

DELETE /api/v1/categories/{id} 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
新闻分类

查询与路径参数

参数类型必填说明
idinteger必填资源 ID

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/categories/1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "分类已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
404路径中的资源 ID 在库中不存在
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
3002新闻分类不存在
3003分类名称已存在
3004该分类下仍有新闻,无法删除

说明

分类下存在新闻时返回 3004 与 HTTP 409,请先迁移或删除这些新闻。
天气预报

查询城市天气

一次拿到今日实况与未来若干日预报。城市可用 ID 或名称指定,名称支持简写与拼音。

GET /api/v1/weather 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
WeatherVO
所属模块
天气预报

查询与路径参数

参数类型必填说明
cityIdinteger可选城市 ID,如 440300
citystring可选城市名称,支持「北京」「深圳市」「beijing」等写法
forecastDaysinteger可选预报天数,1–15,默认 7

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/weather?cityId=1&forecastDays=1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "cityId": 440300,
    "cityName": "深圳市",
    "provinceName": "广东省",
    "dataSource": "MOCK",
    "updateTime": "2026-10-16 09:24:02",
    "current": {
      "date": "2026-10-16",
      "week": "星期五",
      "weatherDay": "雷阵雨",
      "weatherNight": "晴",
      "tempHigh": 22,
      "tempLow": 11,
      "tempCurrent": 21,
      "humidity": 85,
      "windDirection": "东北风",
      "windScale": "5级",
      "aqi": 60,
      "airQuality": "良",
      "precipitation": 5.24,
      "sunrise": "06:28",
      "sunset": "18:02",
      "tip": "有雷阵雨,注意防雷,尽量减少户外活动"
    },
    "forecast": [
      {
        "date": "2026-10-17",
        "week": "星期六",
        "weatherDay": "阴",
        "weatherNight": "阴",
        "tempHigh": 21,
        "tempLow": 10,
        "tempCurrent": null,
        "humidity": 45,
        "windDirection": "东风",
        "windScale": "2级",
        "aqi": 125,
        "airQuality": "轻度污染",
        "precipitation": 0.0,
        "sunrise": "06:29",
        "sunset": "18:01",
        "tip": "天气舒适,适宜户外活动"
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 WeatherVO

字段类型说明
cityIdinteger城市 ID 例如 110100
cityNamestring城市名称 例如 北京市
provinceNamestring省份名称 例如 北京市
dataSourcestring数据来源:MOCK-模拟数据 REAL-真实数据 例如 MOCK
updateTimestring更新时间
currentItem—
current.datestring日期 例如 2026-10-16
current.weekstring星期 例如 星期五
current.weatherDaystring白天天气 例如 晴
current.weatherNightstring夜间天气 例如 多云
current.tempHighinteger最高气温 ℃ 例如 24
current.tempLowinteger最低气温 ℃ 例如 14
current.tempCurrentinteger当前气温 ℃(仅当天有效) 例如 21
current.humidityinteger相对湿度 % 例如 48
current.windDirectionstring风向 例如 西北风
current.windScalestring风力等级 例如 3级
current.aqiinteger空气质量指数 例如 62
current.airQualitystring空气质量等级 例如 良
current.precipitationnumber降水量 mm 例如 0.0
current.sunrisestring日出时间 例如 06:12
current.sunsetstring日落时间 例如 17:48
current.tipstring生活提示
forecastarray<Item>未来天气预报
forecast.datestring日期 例如 2026-10-16
forecast.weekstring星期 例如 星期五
forecast.weatherDaystring白天天气 例如 晴
forecast.weatherNightstring夜间天气 例如 多云
forecast.tempHighinteger最高气温 ℃ 例如 24
forecast.tempLowinteger最低气温 ℃ 例如 14
forecast.tempCurrentinteger当前气温 ℃(仅当天有效) 例如 21
forecast.humidityinteger相对湿度 % 例如 48
forecast.windDirectionstring风向 例如 西北风
forecast.windScalestring风力等级 例如 3级
forecast.aqiinteger空气质量指数 例如 62
forecast.airQualitystring空气质量等级 例如 良
forecast.precipitationnumber降水量 mm 例如 0.0
forecast.sunrisestring日出时间 例如 06:12
forecast.sunsetstring日落时间 例如 17:48
forecast.tipstring生活提示

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
4001暂无该城市的天气数据
4002请指定城市名称或城市 ID

说明

cityId 与 city 传其一即可,同时传入时以 cityId 为准;两者都缺返回 4002。
直辖市与特别行政区直接以省级本身作为查询城市,因此 city=北京 得到 cityName = 北京市。
数据来源为 MOCK。接入真实气象服务时替换服务层实现即可,调用方无需改动。
天气预报

今日实况

只取今天的天气实况,响应体更小,适合卡片式展示。

GET /api/v1/weather/current 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
Item
所属模块
天气预报

查询与路径参数

参数类型必填说明
cityIdinteger可选城市 ID,如 440300
citystring可选城市名称,支持「北京」「深圳市」「beijing」等写法

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/weather/current?cityId=1'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "date": "2026-10-16",
    "week": "星期五",
    "weatherDay": "雷阵雨",
    "weatherNight": "晴",
    "tempHigh": 22,
    "tempLow": 11,
    "tempCurrent": 21,
    "humidity": 85,
    "windDirection": "东北风",
    "windScale": "5级",
    "aqi": 60,
    "airQuality": "良",
    "precipitation": 5.24,
    "sunrise": "06:28",
    "sunset": "18:02",
    "tip": "有雷阵雨,注意防雷,尽量减少户外活动"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 Item

字段类型说明
datestring日期 例如 2026-10-16
weekstring星期 例如 星期五
weatherDaystring白天天气 例如 晴
weatherNightstring夜间天气 例如 多云
tempHighinteger最高气温 ℃ 例如 24
tempLowinteger最低气温 ℃ 例如 14
tempCurrentinteger当前气温 ℃(仅当天有效) 例如 21
humidityinteger相对湿度 % 例如 48
windDirectionstring风向 例如 西北风
windScalestring风力等级 例如 3级
aqiinteger空气质量指数 例如 62
airQualitystring空气质量等级 例如 良
precipitationnumber降水量 mm 例如 0.0
sunrisestring日出时间 例如 06:12
sunsetstring日落时间 例如 17:48
tipstring生活提示

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
4001暂无该城市的天气数据
4002请指定城市名称或城市 ID

说明

该接口为公开接口,无需任何凭证即可调用。
天气预报

未来预报

返回不含今天的未来若干天预报,days 默认 7、上限 15。

GET /api/v1/weather/forecast 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Item>
所属模块
天气预报

查询与路径参数

参数类型必填说明
cityIdinteger可选城市 ID,如 440300
citystring可选城市名称,支持「北京」「深圳市」「beijing」等写法
daysinteger可选预报天数,1–15,默认 7 例如 7

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/weather/forecast?cityId=1&days=7'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "date": "2026-10-17",
      "week": "星期六",
      "weatherDay": "阴",
      "weatherNight": "阴",
      "tempHigh": 21,
      "tempLow": 10,
      "tempCurrent": null,
      "humidity": 45,
      "windDirection": "东风",
      "windScale": "2级",
      "aqi": 125,
      "airQuality": "轻度污染",
      "precipitation": 0.0,
      "sunrise": "06:29",
      "sunset": "18:01",
      "tip": "天气舒适,适宜户外活动"
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Item>

字段类型说明
datestring日期 例如 2026-10-16
weekstring星期 例如 星期五
weatherDaystring白天天气 例如 晴
weatherNightstring夜间天气 例如 多云
tempHighinteger最高气温 ℃ 例如 24
tempLowinteger最低气温 ℃ 例如 14
tempCurrentinteger当前气温 ℃(仅当天有效) 例如 21
humidityinteger相对湿度 % 例如 48
windDirectionstring风向 例如 西北风
windScalestring风力等级 例如 3级
aqiinteger空气质量指数 例如 62
airQualitystring空气质量等级 例如 良
precipitationnumber降水量 mm 例如 0.0
sunrisestring日出时间 例如 06:12
sunsetstring日落时间 例如 17:48
tipstring生活提示

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
4001暂无该城市的天气数据
4002请指定城市名称或城市 ID

说明

该接口为公开接口,无需任何凭证即可调用。
天气预报

批量查询实况

一次查询多个城市的今日实况,适合城市对比或天气地图。

GET /api/v1/weather/batch 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Item>
所属模块
天气预报

查询与路径参数

参数类型必填说明
cityIdsarray<integer>必填城市 ID 列表,逗号分隔,如 110000,440300

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/weather/batch'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "date": "2026-10-16",
      "week": "星期五",
      "weatherDay": "晴",
      "tempHigh": 22,
      "tempLow": 11,
      "tempCurrent": 13,
      "humidity": 41,
      "windDirection": "北风",
      "windScale": "5级",
      "aqi": 56,
      "airQuality": "良",
      "precipitation": 0.0,
      "sunrise": "06:28",
      "sunset": "18:02"
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Item>

字段类型说明
datestring日期 例如 2026-10-16
weekstring星期 例如 星期五
weatherDaystring白天天气 例如 晴
weatherNightstring夜间天气 例如 多云
tempHighinteger最高气温 ℃ 例如 24
tempLowinteger最低气温 ℃ 例如 14
tempCurrentinteger当前气温 ℃(仅当天有效) 例如 21
humidityinteger相对湿度 % 例如 48
windDirectionstring风向 例如 西北风
windScalestring风力等级 例如 3级
aqiinteger空气质量指数 例如 62
airQualitystring空气质量等级 例如 良
precipitationnumber降水量 mm 例如 0.0
sunrisestring日出时间 例如 06:12
sunsetstring日落时间 例如 17:48
tipstring生活提示

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
4001暂无该城市的天气数据
4002请指定城市名称或城市 ID

说明

单个城市失败不会中断整批请求,仅跳过并在服务端记录日志。
天气预报

搜索城市

复用地区搜索能力,返回可用于查询天气的城市列表,适合做城市输入联想。

GET /api/v1/weather/cities 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
array<Region>
所属模块
天气预报

查询与路径参数

参数类型必填说明
keywordstring必填关键词,模糊匹配
limitinteger可选返回条数上限 例如 20

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/weather/cities?limit=20'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 440300,
      "parentId": 440000,
      "name": "深圳市",
      "shortName": null,
      "level": 2,
      "code": "440300",
      "areaCode": null,
      "pinyin": "shenzhenshi",
      "sort": 3,
      "status": 1
    }
  ],
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 array<Region>

字段类型说明
idinteger地区 ID(行政区划代码) 例如 110000
parentIdinteger上级地区 ID,顶级为 0 例如 0
namestring地区名称 例如 北京市
shortNamestring简称 例如 京
levelinteger层级:1-省 2-市 3-区县 例如 1
codestring行政区划代码字符串 例如 110000
zipCodestring邮政编码
areaCodestring电话区号 例如 010
lngnumber经度
latnumber纬度
pinyinstring拼音(支持拼音搜索) 例如 beijingshi
sortinteger排序值
statusinteger状态:1-启用 0-停用

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
4001暂无该城市的天气数据
4002请指定城市名称或城市 ID

说明

该接口为公开接口,无需任何凭证即可调用。
图片上传

上传图片

上传后按「业务类型 / 年 / 月 / 日」归档,返回可直接访问的 URL。

POST /api/v1/files/upload 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
multipart/form-data
响应内容类型
application/json
幂等性
非幂等,重复提交会产生多条数据
响应数据模型
UploadVO
所属模块
图片上传

查询与路径参数

参数类型必填说明
typestring可选业务目录,用于归档,如 avatar、news 例如 common

请求体字段

字段类型必填说明
filestring必填文件

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X POST https://boot.qingwu.ink/api/v1/files/upload \
  -H "Authorization: Bearer <accessToken>" \
  -F "file=@avatar.png" \
  -F "type=avatar"

响应示例

200 OK
{
  "code": 200,
  "message": "上传成功",
  "data": {
    "url": "/uploads/avatar/2026/10/16/9f3c1a2b7e4d.png",
    "originalName": "avatar.png",
    "size": 20480,
    "contentType": "image/png"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 UploadVO

字段类型说明
urlstring文件访问 URL 例如 /uploads/2026/10/16/a1b2c3.png
originalNamestring原始文件名 例如 avatar.png
sizeinteger文件大小(字节) 例如 20480
contentTypestring文件类型 例如 image/png

状态码与错误码

状态码出现场景
201请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
413上传文件超过 `spring.servlet.multipart.max-file-size`
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
5001上传文件不能为空
5002不支持的文件类型
5003文件上传失败

说明

使用 multipart/form-data 提交。type 用于区分业务目录,如 avatar、news。
支持 jpg/jpeg/png/gif/bmp/webp,单文件上限 10 MB;类型不符返回 5002。
图片上传

删除文件

删除此前上传的文件。只接受本站 urlPrefix 下的地址,并做路径穿越校验。

DELETE /api/v1/files 需登录

接口概要

鉴权要求
需登录(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
图片上传

查询与路径参数

参数类型必填说明
urlstring必填文件访问 URL,必须是本站上传返回的地址

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/files'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "文件已删除",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志
模块业务码
5001上传文件不能为空
5002不支持的文件类型
5003文件上传失败

说明

需在请求头携带 Authorization: Bearer ;令牌过期请先用刷新令牌接口换取新的访问令牌。
系统信息

健康检查

返回服务名、状态、服务器时间与 Java 版本,可供负载均衡探活。

GET /api/v1/common/health 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
系统信息

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/common/health'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "application": "zm-api",
    "status": "UP",
    "time": "2026-10-16T09:25:26.071809300",
    "javaVersion": "21.0.9"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明由示例推导

字段类型说明
applicationstring—
statusstring—
timestring—
javaVersionstring—

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

该接口为公开接口,无需任何凭证即可调用。
系统信息

服务器时间

返回服务器本地时间、毫秒时间戳与时区,用于前端校准或排查时区问题。

GET /api/v1/common/time 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
系统信息

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/common/time'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "localDateTime": "2026-10-16T09:25:26.071809300",
    "timestamp": 1792113926072,
    "zone": "Asia/Shanghai"
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明由示例推导

字段类型说明
localDateTimestring—
timestampinteger—
zonestring—

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

该接口为公开接口,无需任何凭证即可调用。
系统信息

枚举字典

集中下发性别、用户状态、新闻状态、地区层级与排序方式等枚举,前端无需硬编码。

GET /api/v1/common/enums 公开

接口概要

鉴权要求
公开(无需令牌)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
系统信息

请求示例7 种语言

该接口无需令牌,可直接调用。把示例中的参数值换成你的实际值即可。

curl -X GET 'https://boot.qingwu.ink/api/v1/common/enums'
  -H 'Accept: application/json'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "gender": [
      {
        "value": 0,
        "label": "未知"
      },
      {
        "value": 1,
        "label": "男"
      },
      {
        "value": 2,
        "label": "女"
      }
    ],
    "newsStatus": [
      {
        "value": 0,
        "label": "草稿"
      },
      {
        "value": 1,
        "label": "已发布"
      },
      {
        "value": 2,
        "label": "已下架"
      }
    ],
    "newsOrderBy": [
      {
        "value": "latest",
        "label": "最新发布"
      },
      {
        "value": "hot",
        "label": "浏览量最高"
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明由示例推导

字段类型说明
genderarray—
gender.valueinteger—
gender.labelstring—
newsStatusarray—
newsStatus.valueinteger—
newsStatus.labelstring—
newsOrderByarray—
newsOrderBy.valuestring—
newsOrderBy.labelstring—

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

该接口为公开接口,无需任何凭证即可调用。
操作日志

操作日志列表

分页查询审计记录,可按操作人、模块、操作描述关键词与执行结果过滤。

GET /api/v1/logs 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
PageResult<OperationLog>
所属模块
操作日志

查询与路径参数

参数类型必填说明
pageNuminteger可选页码,从 1 开始
pageSizeinteger可选每页条数,最大 100
keywordstring可选关键词,模糊匹配
successinteger可选执行结果:1 成功 / 0 失败

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X GET 'https://boot.qingwu.ink/api/v1/logs?pageNum=1&pageSize=1&success=1'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "pageNum": 1,
    "pageSize": 5,
    "total": 1,
    "pages": 1,
    "list": [
      {
        "id": 12,
        "userId": 1,
        "username": "admin",
        "module": "资讯管理",
        "operation": "新增新闻",
        "method": "POST /api/v1/news",
        "ip": "127.0.0.1",
        "costMs": 43,
        "success": 1,
        "errorMsg": null,
        "createTime": "2026-10-16 09:31:07"
      }
    ]
  },
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明匹配模型 PageResult<OperationLog>

字段类型说明
pageNuminteger当前页码
pageSizeinteger每页条数
totalinteger记录总数
pagesinteger总页数
listarray<OperationLog>当前页的数据集合
list.idinteger主键 ID
list.userIdinteger操作人 ID
list.usernamestring操作人账号
list.modulestring模块
list.operationstring操作描述
list.methodstring请求方法 + 路径
list.paramsstring请求参数
list.ipstring客户端 IP
list.costMsinteger耗时(毫秒)
list.successinteger是否成功:1-是 0-否
list.errorMsgstring错误信息
list.createTimestring创建时间

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
400参数校验未通过,`message` 为具体字段的提示
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

本组接口需要管理员角色,普通用户访问会返回 403。
日志由 AOP 切面自动写入,标注了 @LogOperation 的接口才会有记录。
操作日志

清空操作日志

一次性清空全部审计记录,请谨慎使用。

DELETE /api/v1/logs 管理员

接口概要

鉴权要求
仅管理员(缺少有效令牌返回 401)
请求内容类型
—
响应内容类型
application/json
幂等性
幂等,重复调用结果一致
响应数据模型
基本类型 / 空值
所属模块
操作日志

请求示例7 种语言

示例中的 <accessToken> 是占位符,请替换为登录接口返回的令牌。

curl -X DELETE 'https://boot.qingwu.ink/api/v1/logs'
  -H 'Accept: application/json'
  -H 'Authorization: Bearer <accessToken>'

响应示例

200 OK
{
  "code": 200,
  "message": "操作日志已清空",
  "data": null,
  "timestamp": 1792113842032,
  "success": true
}

完整响应对照 基础约定 中的统一响应结构。

响应字段说明

该接口的 data 为基本类型或空值,没有可展开的字段。

状态码与错误码

状态码出现场景
200请求成功,业务码与 HTTP 状态码保持一致
401未携带令牌、令牌无效或已过期
403已登录但不是管理员;或账号被禁用
500服务端未捕获的异常,`message` 为简要原因;详细堆栈见服务端日志

说明

本组接口需要管理员角色,普通用户访问会返回 403。
该接口要求管理员角色:普通用户即使携带有效令牌也会被拒绝(HTTP 403,业务码 1011)。