springboot_03

1. 更新用户基本信息

  • 路由:@PutMapping("/user/update")

  • 前端传递 nicknameemail 等字段封装到 DTO

  • 后端用 @Validated 开启参数校验

  • 使用 ThreadLocal(或 JWT 拦截器)获取当前登录用户 ID

  • Service 层只更新该用户自己的信息,避免越权


2. 更新信息时的参数校验

  • DTO 中字段如 nicknameemail 上加 @NotBlank@Email

  • Controller 方法使用 @Validated @RequestBody

  • 出现校验异常时,统一由 @RestControllerAdvice 全局异常处理器捕获,返回格式化错误信息


3. 更新用户头像(本地存储)

  • 前端通过 FormData 上传图片,后端用 MultipartFile 接收

  • 使用 UUID 生成唯一文件名,保留原扩展名

  • 保存到本地固定目录(如 /upload/

  • 把文件访问 URL 存入用户表 avatar 字段


4. 修改用户密码

  • 前端提交原密码 + 新密码

  • 后端先通过用户 ID 查询出旧密码(MD5 加密)

  • 使用工具类 DigestUtils.md5Hex() 对比原密码

  • 验证通过则更新为新密码(同样 MD5 加密后存储)


5. 新增文章分类

  • 路由:@PostMapping("/category")

  • 接收 DTO(如 namealias

  • 对 DTO 使用 @Valid + 分组 @Validated 校验字段不能为空

  • Service 层调用 Mapper 插入数据库

  • 返回 Result.success()


6. 查询分类列表

  • 路由:@GetMapping("/category")

  • 无需参数或带条件分页(可选)

  • Service 层调用 Mapper 查询 List<CategoryVO>

  • VO 可使用 @JsonFormat 格式化时间字段(如 createTimeupdateTime


7. 获取分类详情

  • 路由:@GetMapping("/category/{id}")

  • 根据 URL 路径参数接收 id

  • Service 调用 Mapper 根据主键查询分类

  • 返回前端用于回显


8. 修改文章分类

  • 路由:@PutMapping("/category")

  • DTO 除了 namealias 还需带 id

  • 启用分组校验(@Validated(Update.class)

  • Service 调用 Mapper 更新数据

  • 返回 Result.success()


9. 分类新增/修改 + 分组校验

  • 同一个 DTO 既可用于新增也可用于修改

  • 使用分组接口区分校验规则:

```java

public interface Add {}

public interface Update {}

```

  • @NotNull(groups = Update.class) 表示仅在更新时必须带 id

  • Controller 根据操作调用对应分组


10. 新增文章

  • 路由:@PostMapping("/article")

  • 前端提交 titlecontentcoverImgcategoryIdstate

  • DTO 使用 @NotBlank@NotNull@URL@Size 限制长度、合法性

  • 自定义 @State 校验字段只能是"已发布"或"草稿"

  • Service 中自动填充 createUser(当前登录用户)、createTime

  • 调用 Mapper 插入文章表


11. 自定义注解 @State

  • 新建注解 @State

  • 配套写校验器 StateValidation implements ConstraintValidator

  • 校验器逻辑:如果 state 不在允许列表则抛异常

  • 在 DTO state 字段上加 @State 启用校验


12. 文章分页查询 + 条件查询

  • 路由:@GetMapping("/article")

  • 参数:pageNumpageSize、可选 categoryIdstate

  • Service 中使用 PageHelper.startPage(pageNum, pageSize)

  • Mapper 按条件动态 SQL 查询文章列表

  • 返回封装好的 PageBean<ArticleVO> 包含列表和总条数


13. 文件上传(本地)

  • 路由:@PostMapping("/upload")

  • 接收前端 FormData,参数名需一致

  • 使用 UUID 生成唯一文件名避免覆盖

  • file.transferTo(new File(uploadPath)) 存到本地

  • 返回访问 URL,前端可回显图片

相关推荐
涡能增压发动积15 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o15 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
swg32132115 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung15 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald15 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
@yanyu66615 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
sg_knight15 小时前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
殷紫川15 小时前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
元宝骑士15 小时前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户319523703477115 小时前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端