移动端通知(mobile.NoticeController)¶
移动端事件通知接口:分页获取当前用户的通知列表、删除指定通知、批量标记已读。
- 接口类型:REST 资源(
@Controller继承mobile.common.controller.BaseController,方法标注@ResponseBody,返回Map<String, Object>,由 Spring Jackson 序列化为 JSON 对象;响应非统一Resource,封装为{ "status": 0/1, "message": "ok"/"error", "data": <数据> },详见「公共说明 · 响应结构」) - 基址:
${myapps.context-path.runtime:}/runtime/app/notice - Tag:事件通知模块(源码类级
@Tag(name = "事件通知模块"))
公共说明¶
- 鉴权(据源码):基址
/runtime/app/notice不在RestSecurityHandlerInterceptor覆盖范围(拦截器仅覆盖/api/runtime/**与/api/rest/bpm/**)。鉴权由RuntimeMvcConfig注册的全局过滤器RuntimeSecurityFilter(URL 模式/*)执行:过滤器解析AuthTimeServiceManager.getWebUser(request),取不到登录用户则返回401(或 SSO 模式下重定向到/signon)。除显式说明外,端点均需 accessToken,可通过 Cookie / 请求头 / query 参数任一方式传递。#1 list在控制器内显式调用getUserId(),无登录态时直接返回失败结果。 - 响应结构(据源码
mobile.common.controller.BaseController.addActionResult):本控制器所有端点返回Map<String, Object>,结构为: status:0成功,1失败;message:成功ok,失败error;data:业务数据;当业务返回null时data字段缺省;写入前由ESAPI.encode(data)做 XSS 编码。- 与统一
Resource(errcode/errmsg/data/errors)约定不一致,本文档按源码如实记录。 - 参数读取:参数通过
BaseController.getParams()(基于ParamsTable.convertHTTP(request))统一从 query / form 读取,无@RequestParam注解。 - Feign 调用:控制器通过
SpringApplicationContextUtil.getBean(NoticeApi.class)取NoticeApi(Feign 客户端)调用消息服务,再包成移动端响应结构返回。
1. 获取通知¶
分页获取当前用户的事件通知列表(经 NoticeApi.getNotices("0", pageNum, pageSize) 拉取后转换为移动端格式)。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method,支持 GET / POST 等所有方法) - 请求路径:
/list.action(完整:{runtime-context}/runtime/app/notice/list.action) - 鉴权:是(需 accessToken;无登录态时
getUserId()返回null,控制器直接返回失败结果) - Tag:事件通知模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| access_token | query | string | 是 | 访问令牌(亦可经 Cookie / 请求头传递) |
| pageNum | query | int | 否 | 页码,默认 1 |
| pageSize | query | int | 否 | 每页条数,默认 Integer.MAX_VALUE(即全量) |
请求示例¶
GET /runtime/app/notice/list.action?pageNum=1&pageSize=20 HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:List<Map>,元素字段 { id, content(JSONObject,空内容为空对象), linkParams(JSONObject,空内容为空对象), toUserId, createTime, read(恒为 false), module, subjectType, messageType(恒为 1) }。
{
"status": 0,
"message": "ok",
"data": [
{
"id": "__NOTICEID__",
"content": { "title": "流程待办提醒", "body": "您有 1 条待办" },
"linkParams": { "docId": "__DOCID__", "applicationId": "__APPID__" },
"toUserId": "__USERID__",
"createTime": "2026-08-01 10:00:00",
"read": false,
"module": "bpm",
"subjectType": "todo",
"messageType": 1
}
]
}
2. 删除通知¶
按通知 id 删除指定通知(经 NoticeApi.removeNotice(id))。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method) - 请求路径:
/delete.action(完整:{runtime-context}/runtime/app/notice/delete.action) - 鉴权:是(需 accessToken;源码
@Parameter标注的是access_token与id,但控制器内未显式校验登录态,依赖前置RuntimeSecurityFilter) - Tag:事件通知模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| id | query | string | 是 | 通知主键 |
请求示例¶
GET /runtime/app/notice/delete.action?id=__NOTICEID__ HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:成功时缺省(业务数据为 null)。
3. 标记已读¶
按通知 id 列表(分隔符未限定,由 NoticeApi.readNotice(ids) 解析)批量标记已读。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method) - 请求路径:
/read.action(完整:{runtime-context}/runtime/app/notice/read.action) - 鉴权:是(需 accessToken)
- Tag:事件通知模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| access_token | query | string | 是 | 访问令牌 |
| ids | query | string | 是 | 通知主键集合(源码 @Parameter 描述误写为「联系人主键」,据方法语义应为通知 id) |
请求示例¶
GET /runtime/app/notice/read.action?ids=__NOTICEID1__,__NOTICEID2__ HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:成功时缺省(业务数据为 null)。