跳转至

移动端用户资料(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,
      "message": "ok",
      "data": <数据>
    }
    
  • status0 成功,1 失败;
  • message:成功 ok,失败 error
  • data:业务数据;当业务返回 nulldata 字段缺省;写入前由 ESAPI.encode(data) 做 XSS 编码。例外#3 save 失败分支可能将字符串错误描述(如 "原密码错误""原密码不能为空")作为 data 传入。
  • 与统一 Resourceerrcode/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,固定字段见「公共说明 · 响应结构」。 dataList<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)。

请求示例

GET /runtime/app/users/queryUser.action HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...

响应

结构Map,固定字段见「公共说明 · 响应结构」。 dataUser 对象,字段同 #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 非空时必填,与库内解码后的密码比对,不符返回 "原密码错误"
email 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);改密失败时为错误描述字符串("原密码错误""原密码不能为空")。

成功示例:

{ "status": 0, "message": "ok" }

改密失败示例:

{ "status": 1, "message": "error", "data": "原密码错误" }