diff --git a/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java b/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java
index 50047c1..716cee0 100644
--- a/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java
+++ b/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java
@@ -1,6 +1,7 @@
package com.yunhai.userbase.controller.oapi;
import com.yunhai.platform.appauth.AppAuthFilter;
+import com.yunhai.platform.apistd.ApiResponse;
import com.yunhai.platform.utils.exception.DException;
import com.yunhai.platform.utils.model.BoaGroup;
import com.yunhai.platform.utils.model.BoaModule;
@@ -240,12 +241,15 @@ public class UserController {
/**
* 修改用户头像:校验图片(非空/≤20MB/扩展名白名单)→ 压缩 → 存储并写入 profile_picture,
* 返回新头像完整 Web URL。multipart 直传(form 字段 userId + 文件 part file)。
- * 与修改密码一致,仅由过滤器层强制应用签名;POST 自动记 OapiLog(文件内容不落库,仅记文件名元数据)。
+ * 与修改密码一致,仅由过滤器层强制应用签名;POST 自动记 OapiLog(文件内容不落库,仅记文件名元数据)。
+ * 注意必须显式返回 {@link ApiResponse} 信封:若直接返回 String,
+ * ApiResponseAdvice 会跳过包装(String 走 StringHttpMessageConverter 无法套壳),
+ * 响应变成裸文本 URL,调用方(yh-openapi-client)按 JSON 解析会报 deserialize failed。
*/
@PostMapping("profilePicture")
- public String profilePicture(@RequestParam("userId") Integer userId,
+ public ApiResponse profilePicture(@RequestParam("userId") Integer userId,
@RequestParam("file") MultipartFile file) {
- return sysUserService.changeProfilePicture(userId, file);
+ return ApiResponse.success(sysUserService.changeProfilePicture(userId, file));
}
/**