一、新增文章分类接口
1. 核心需求
- 使用 Spring Validation 完成参数校验(分类名 / 别名非空)
- Service 层自动填充
createUser、createTime、updateTime - 插入数据到
category表
2. 实体类(Category.java)
java
运行
@Data
public class Category {
private Integer id; // 主键ID
@NotEmpty(message = "分类名称不能为空")
private String categoryName; // 分类名称
@NotEmpty(message = "分类别名不能为空")
private String categoryAlias; // 分类别名
private Integer createUser; // 创建人ID
private LocalDateTime createTime; // 创建时间
private LocalDateTime updateTime; // 更新时间
}
3. Controller 层(新增接口)
java
运行
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
@PostMapping
public Result add(@RequestBody @Validated Category category) {
categoryService.add(category);
return Result.success();
}
}
4. Service 层(业务逻辑)
java
运行
@Service
public class CategoryServiceImpl implements CategoryService {
@Autowired
private CategoryMapper categoryMapper;
@Override
public void add(Category category) {
// 1. 从 ThreadLocal 获取当前登录用户ID
Map<String, Object> claims = ThreadLocalUtil.get();
Integer userId = (Integer) claims.get("id");
// 2. 自动填充字段
category.setCreateUser(userId);
LocalDateTime now = LocalDateTime.now();
category.setCreateTime(now);
category.setUpdateTime(now);
// 3. 调用 Mapper 插入数据
categoryMapper.add(category);
}
}
5. Mapper 层(SQL)
java
运行
@Mapper
public interface CategoryMapper {
@Insert("insert into category(category_name, category_alias, create_user, create_time, update_time) " +
"values(#{categoryName}, #{categoryAlias}, #{createUser}, #{createTime}, #{updateTime})")
void add(Category category);
}
二、文章分类列表接口
1. 核心需求
- 查询当前用户创建的所有文章分类
- 无需参数,直接返回分类列表
2. Controller 层(列表接口)
java
运行
@GetMapping
public Result<List<Category>> list() {
List<Category> categoryList = categoryService.list();
return Result.success(categoryList);
}
3. Service 层(业务逻辑)
java
运行
@Override
public List<Category> list() {
// 从 ThreadLocal 获取当前登录用户ID
Map<String, Object> claims = ThreadLocalUtil.get();
Integer userId = (Integer) claims.get("id");
return categoryMapper.list(userId);
}
4. Mapper 层(SQL)
java
运行
@Select("select * from category where create_user = #{userId}")
List<Category> list(Integer userId);
三、关键注意事项
-
参数校验生效:
- 实体类字段添加
@NotEmpty注解 - Controller 接口参数前添加
@Validated - 确保已引入
spring-boot-starter-validation依赖
- 实体类字段添加
-
用户 ID 安全获取:
- 不要由前端传入用户 ID,统一从
ThreadLocal中获取,避免越权操作
- 不要由前端传入用户 ID,统一从
-
时间字段自动填充:
- 新增时
createTime和updateTime都设置为当前时间 - 后续更新时,只修改
updateTime字段
- 新增时