『博客开发日记-后台』之添加分类接口的实现

本文最后更新于 2026年4月19日 上午

新建分类接口的实现


新建分类测试接口的需求

可以添加分类


代码实现

创建 AddCategoryDto 请求对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 添加分类请求DTO
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "添加分类请求对象")
public class AddCategoryDto {

@ApiModelProperty(value = "分类名称", required = true, example = "技术分享")
private String name;

@ApiModelProperty(value = "分类描述", example = "技术相关的文章")
private String description;

@ApiModelProperty(value = "排序值", example = "0")
private Integer sort;

@ApiModelProperty(value = "状态(0-正常,1-禁用)", required = true, example = "0")
private String status;
}

其他的照旧 下面是服务类的功能实现

很简单

1
2
3
4
5
6
7
8
9
10
//新增分类
@Override
public ResponseResult addCategory(AddCategoryDto addCategoryDto)
{
//添加分类
Category category = BeanCopyUtils.copyBean(addCategoryDto, Category.class);
categoryService.save(category);

return ResponseResult.okResult();
}

然后要处理一下当数据库唯一键值重复时返回的报错信息

这是在测试新增分类时候发现的

如果新增的分类名重复了 后端会返回所有报错和调试信息给前端

其实如果重复 后端只需要传递明确的错误信息就行了 调试日志并不需要全部传递

下面是对 GlobalExceptionHandler 类的处理 新增 handleDuplicateKeyException 方法来 处理数据库唯一键值冲突 的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//处理数据库唯一键值冲突
@ExceptionHandler(DuplicateKeyException.class)
public ResponseResult<Void> handleDuplicateKeyException(DuplicateKeyException e)
{
log.error("数据库唯一键冲突", e);

String errorMsg = e.getCause().getMessage();
String message = "数据已存在,请检查后重试";

// 解析具体的重复字段
if (errorMsg.contains("Duplicate entry")) {
// 提取重复的值
Pattern pattern = Pattern.compile("Duplicate entry '(.+?)' for key '(.+?)'");
Matcher matcher = pattern.matcher(errorMsg);

if (matcher.find()) {
String duplicateValue = matcher.group(1);
String keyName = matcher.group(2);

// 根据键名返回提示
if (keyName.contains("uk_name") || keyName.contains("name")) {
message = "名称 '" + duplicateValue + "' 已存在!";
} else if (keyName.contains("uk_username") || keyName.contains("username")) {
message = "用户名 '" + duplicateValue + "' 已存在!";
}
}
}

return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), message);
}

最后测试接口成功




PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记-后台』之添加分类接口的实现
http://example.com/2026/04/17/『博客开发日记-后台』之添加分类接口的实现/
作者
云梦泽
发布于
2026年4月17日
更新于
2026年4月19日
许可协议