【Spring开发】SpringCloud交友项目实战第5篇:1.3 保存用户信息,2.2 更新用户资料【附代码文档】

举报
小帅说java 发表于 2025/09/04 20:16:46 2025/09/04
【摘要】 1、Dubbo的前世今生 1、项目介绍 1.1、项目背景 1.2、市场分析 1.3、目标用户群体 1.4、使用场景 1.5、竞争对手分析 1.7、技术方案 2、前后端分离开发思想 3、开发工具与环境搭建 3.1、开发工具 3.2、环境搭建 4、sms_code验证玛 4.1 阿里云短信 4.2 自动装配 1. 完善用户信息 1.2 百度人脸识别 1.2.1 概述 1.2.2 账

🏆🏆🏆教程全知识点简介:1、Dubbo的前世今生 1、项目介绍 1.1、项目背景 1.2、市场分析 1.3、目标用户群体 1.4、使用场景 1.5、竞争对手分析 1.7、技术方案 2、前后端分离开发思想 3、开发工具与环境搭建 3.1、开发工具 3.2、环境搭建 4、sms_code验证玛 4.1 阿里云短信 4.2 自动装配 1. 完善用户信息 1.2 百度人脸识别 1.2.1 概述 1.2.2 账号申请 1.2.4 抽取模板工具 2.2 更新用户资料 2.2.1 接口文档 2.2.2 代码实现 3. 统一token处理 3.1.需求分析 3.2 解决方案 拦截器(Interceptor) ThreadLocal MongoDB入门 数据库以及表的操作 新增数据 更新数据 删除数据 查询数据 1.3 设置陌生人问题 1.4 通知设置 1.5 黑名单管理 4. SpringData-Mongo 4.2 完成基本操作 5. 今日佳人 5.1 表结构设计 5.2 服务提供者 5.2.0 导入依赖 5.2.2 RecommendUserApi接口 分片集群 原理介绍 集群搭建 2、圈子功能 2.1、功能说明 3、圈子实现 3.2、发布动态 1. 动态查询 1.1 查询好友动态 2. 圈子互动 2.3 动态点赞 2.4.3 喜欢标识 安装 准备 使用 1. 即时通信 2. 环信 2.1 开发简介 2.2 环信Console 2.3 环信API介绍 初始化 基础API 3. 抽取环信组件 3.1 编写Properties对象 3.2 编写HuanXinTemplate 3.3 编写自动配置类 2. MongoDB地理位置检索 2.1 地理位置索引 Point LineString Polygon 2.2 案例 3. 上报地理位置 4. 搜附近 1. 我的访客 1.2 记录访客数据 tanhua-model tanhua-app-server tanhua-dubbo-interface 1.3 首页谁看过我 需求分析 3. FastDFS 3.2. 工作原理 3.2.1. 文件的上传 分布式文件系统FDFS配置 4. 发布小视频 1、用户冻结解冻 1.1 用户冻结 1.3 查询数据列表 1.4 明日系统修改 2.2 定时任务 3、内容审核 1、了解推荐系统 1.1、什么是推荐系统? 1.3、推荐系统业务流程 1.4、协同过滤推荐算法 1.5、ALS算法 2、好友推荐 2.1、流程 2.2、部署好友推荐服务


📚📚👉👉👉git仓库code.zip 直接get:   https://gitee.com/xiaoshuai112/Backend/blob/master/Spring/SpringCloud交友项目实战/note.md    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

1.3 保存用户信息

1.3.1 接口文档

YAPI接口地址:

1.3.2 需求分析

数据库表

tb_user_info(用户基本资料表)

  • 用户表和用户信息表是一对一的关系,两者采用主键关联的形式配置

  • 主键关联:用户表主键和用户资料表主键要保持一致(如:用户表id=1,此用户的资料表id=1)

执行流程

  1. 手机端发送请求到消费者
  2. 消费者构造数据,调用提供者
  3. 消费者完成业务处理,操作数据库

1.3.3 代码实现

UserInfo实体类

tanhua-model模块创建实体类UserInfo

[HikariCP 文档]

package com.tanhua.model.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo extends BasePojo {

    /**
     * 由于userinfo表和user表之间是一对一关系
     * userInfo的id来源于user表的id
     */
    @TableId(type = IdType.INPUT)
    private Long id; //用户id
    private String nickname; //昵称
    private String avatar; //用户头像
    private String birthday; //生日
    private String gender; //性别
    private Integer age; //年龄
    private String city; //城市
    private String income; //收入
    private String education; //学历
    private String profession; //行业
    private Integer marriage; //婚姻状态
    private String tags; //用户标签:多个用逗号分隔
    private String coverPic; // 封面图片

    //用户状态,1为正常,2为冻结
    @TableField(exist = false)
    private String userStatus = "1";
}

tanhua-app-server

tanhua-app-server中定义控制器接收客户端请求 , 调用dubbo服务完成业务代码编写

UserController

UserController中定义方法接收客户端请求

[Apache Shiro 文档]

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserInfoService userInfoService;

    /**
     * 保存用户信息
     *   UserInfo
     *   请求头中携带token
     */
    @PostMapping("/loginReginfo")
    public ResponseEntity loginReginfo(@RequestBody UserInfo userInfo,
                                       @RequestHeader("Authorization") String token) {
        //1、判断token是否合法
        boolean verifyToken = JwtUtils.verifyToken(token);
        if(!verifyToken) {
            return ResponseEntity.status(401).body(null);
        }
        //2、向userinfo中设置用户id
        Claims claims = JwtUtils.getClaims(token);
        Integer id = (Integer) claims.get("id");
        userInfo.setId(Long.valueOf(id));
        //3、调用service
        userInfoService.save(userInfo);
        return ResponseEntity.ok(null);
    }
}
UserInfoService

创建UserInfoService类, 定义保存用户基础信息的方法

package com.tanhua.server.service;

import com.tanhua.autoconfig.template.AipFaceTemplate;
import com.tanhua.autoconfig.template.OssTemplate;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.model.domain.UserInfo;
import com.tanhua.model.vo.ErrorResult;
import com.tanhua.model.vo.UserInfoVo;
import com.tanhua.server.exception.BusinessException;
import org.apache.d

## 1.4 上传用户头像

### 1.4.1 需求分析

#### 接口文档

*图片无法加载*

YAPI地址

文件上传采用POST传递mvc中经过文件解析器转化为MultipartFile对象处理

后续请求中请求headr中都有Authorization参数

#### 执行流程

![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20250904/community/586/961/417/0001711010586961417.20250904121628.73626321784124796701219689414149:20250904131633:2415:3D4504D4D767444A72FC4FCB25925336BBAAF640DA5F479D1EE16486CD0FC30A.png)

### 1.4.2 代码实现

>  对数据库的更新接口在保存用户信息的功能中已经完成 , 这里只需要接收请求调用Dubbo服务完成数据更新即可

<font color=red><b>`tanhua-app-server`</b></font>中的UsersController和UserInfoService编写方法

#### **UserController**
```java
/**
 *上传用户头像
 */
@PostMapping("/loginReginfo/head")
public ResponseEntity head(MultipartFile headPhoto,@RequestHeader("Authorization") String token) {
    //1、判断token是否合法
    boolean verifyToken = JwtUtils.verifyToken(token);
    if(!verifyToken) {
        return ResponseEntity.status(401).body(null);
    }
    //2、向userinfo中设置用户id
    Claims claims = JwtUtils.getClaims(token);
    // 注意这里使用Long类型
    Long id = (Long) claims.get("id");
    //3、调用service
    userInfoService.updateHead(headPhoto,id);
}

UserInfoService

//更新用户头像
public void updateHead(MultipartFile headPhoto, Long id) throws IOException {
    //1、将图片上传到阿里云oss
    String imageUrl = ossTemplate.upload(headPhoto.getOriginalFilename(), headPhoto.getInputStream());
    //2、调用百度云判断是否包含人脸
    boolean detect = aipFaceTemplate.detect(imageUrl);
    //2.1 如果不包含人脸,抛出异常
    if(!detect) {
        throw new RuntimeException("不包含人脸");
    }else{
        //2.2 包含人脸,调用API更新
        UserInfo userInfo = new UserInfo();
        userInfo.setId(id);
        userInfo.setAvatar(imageUrl);
        userInfoApi.update(userInfo);
    }
}

2. 用户信息管理

2.1 查询用户资料

2.1.1 接口文档

YAPI地址:

参数userID: 用户id,当不传递时,查询当前用户的资料信息

2.1.2 代码实现

对数据库的更新接口在保存用户信息的功能中已经完成 , 这里只需要接收请求调用Dubbo服务完成数据更新即可

tanhua-app-server中的UsersController和UserInfoService编写方法

UsersController

```java

[Spring Data JPA 文档]

package com.tanhua.server.controller;

import com.tanhua.model.domain.UserInfo; import com.tanhua.server.service.UserInfoService; import com.tanhua.utils.JwtUtils; import io.jsonwebtoken.Claims; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;

import java.io.UnsupportedEncodingException;

/* * @author Administrator / @RestController @RequestMapping(path = "/users") public class UserInfoController {

@Autowired
private UserInfoService userInfoService;

/**
 * 查询用户基础信息
 *
 * @param userID
 * @param token
 * @return
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。