移动端用户资料(mobile.UserController)¶
移动端用户资料接口:按用户 id 列表批量获取联系人资料、查询当前用户资料、更新当前用户资料(含修改密码、修改头像、修改基础信息)。
- 接口类型: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/users - Tag:移动端用户资料(源码类级未声明
@Tag,按模块归并)
公共说明¶
- 鉴权(据源码):基址
/runtime/app/users不在RestSecurityHandlerInterceptor覆盖范围(拦截器仅覆盖/api/runtime/**与/api/rest/bpm/**)。鉴权由RuntimeMvcConfig注册的全局过滤器RuntimeSecurityFilter(URL 模式/*)执行:过滤器解析AuthTimeServiceManager.getWebUser(request),取不到登录用户则返回401(或 SSO 模式下重定向到/signon)。除显式说明外,端点均需 accessToken,可通过 Cookie / 请求头 / query 参数任一方式传递。#2 queryUser、#3 save在控制器内显式调用getUserId(),无登录态时返回失败结果;#1 getUserData源码已注释掉登录态检查(但前置过滤器仍要求登录态)。 - 响应结构(据源码
mobile.common.controller.BaseController.addActionResult):本控制器所有端点返回Map<String, Object>,结构为: status:0成功,1失败;message:成功ok,失败error;data:业务数据;当业务返回null时data字段缺省;写入前由ESAPI.encode(data)做 XSS 编码。例外:#3 save失败分支可能将字符串错误描述(如"原密码错误"、"原密码不能为空")作为data传入。- 与统一
Resource(errcode/errmsg/data/errors)约定不一致,本文档按源码如实记录。 - 参数读取:参数通过
BaseController.getParams()(基于ParamsTable.convertHTTP(request))统一从 query / form 读取,无@RequestParam注解。
1. 获取联系人资料¶
按用户 id 列表(逗号分隔)批量查询联系人资料。源码中登录态检查已被注释(getUserId() 不再校验),但仍会调用 getUserId() 取「我」用于判断常用联系人(该字段当前已被注释,不输出),实际仍依赖前置过滤器强制登录态。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method,支持 GET / POST 等所有方法) - 请求路径:
/getUser.action(完整:{runtime-context}/runtime/app/users/getUser.action) - 鉴权:是(需 accessToken,据源码:
RuntimeSecurityFilter校验登录态) - Tag:移动端用户资料
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| ids | query | string | 是 | 用户主键列表,按英文逗号 , 分隔 |
请求示例¶
GET /runtime/app/users/getUser.action?ids=__USERID1__,__USERID2__ HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:List<User>,元素结构 { id, name, loginNo, email, mobile, mobile2, avatar, domain, dept };avatar 为空时返回 "",dept 不存在时返回 ""。
{
"status": 0,
"message": "ok",
"data": [
{
"id": "__USERID__",
"name": "张三",
"loginNo": "zhangsan",
"email": "zhangsan@example.com",
"mobile": "13800000000",
"mobile2": "",
"avatar": "/uploads/avatar/zhangsan.png",
"domain": "默认企业域",
"dept": "研发部"
}
]
}
2. 查询用户资料¶
查询当前登录用户本人的资料。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method) - 请求路径:
/queryUser.action(完整:{runtime-context}/runtime/app/users/queryUser.action) - 鉴权:是(需 accessToken;无登录态时
getUserId()返回null,控制器直接返回失败结果) - Tag:移动端用户资料
请求参数¶
无业务参数(仅 accessToken)。
请求示例¶
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:User 对象,字段同 #1 的单个元素。
{
"status": 0,
"message": "ok",
"data": {
"id": "__USERID__",
"name": "张三",
"loginNo": "zhangsan",
"email": "zhangsan@example.com",
"mobile": "13800000000",
"mobile2": "",
"avatar": "/uploads/avatar/zhangsan.png",
"domain": "默认企业域",
"dept": "研发部"
}
}
3. 更新用户资料¶
更新当前登录用户的资料:头像、姓名、登录号、邮箱、手机、备用手机,以及修改密码(需校验原密码)。各字段按「非空才更新」策略合并写入;密码修改分支独立校验原密码,错误时返回失败结果且 data 为错误描述字符串。
- 接口类型:REST 资源
- 请求方式:
@RequestMapping(未限定 method) - 请求路径:
/save.action(完整:{runtime-context}/runtime/app/users/save.action) - 鉴权:是(需 accessToken;无登录态时
getUserId()返回null,控制器直接返回失败结果) - Tag:移动端用户资料
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| name | query | string | 否 | 新姓名(非空才更新) |
| loginno | query | string | 否 | 新登录号(非空才更新) |
| password | query | string | 否 | 新密码(非空时触发改密分支,需同时传 oldPassword);服务端按 BASE64 编码后做字符位移 2 位再存储 |
| oldPassword | query | string | 否 | 原密码(明文);当 password 非空时必填,与库内解码后的密码比对,不符返回 "原密码错误" |
| query | string | 否 | 新邮箱(非空才更新) | |
| mobile | query | string | 否 | 新手机号(非空才更新) |
| mobile2 | query | string | 否 | 新备用手机号(非空才更新) |
| avatar | query | string | 否 | 新头像标识(非空才更新) |
请求示例¶
GET /runtime/app/users/save.action?name=张三新&email=zs@example.com HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...
响应¶
结构:Map,固定字段见「公共说明 · 响应结构」。
data:成功时缺省(业务数据为 null);改密失败时为错误描述字符串("原密码错误" 或 "原密码不能为空")。
成功示例:
改密失败示例: