SpringBoot中如何为指定JSON结构实现单表存储的CRUD接口
SpringBoot 实现POST接口落地步骤
以下是对应你给出的JSON结构的单表存储POST接口实现方案,可直接落地:
1. 引入所需依赖
在项目pom.xml(Maven)或build.gradle(Gradle)中引入以下依赖:
- Spring Web:提供HTTP接口能力
- MyBatis-Plus(推荐)/ Spring Data JPA:简化数据库CRUD开发
- MySQL Driver:MySQL数据库连接驱动
- Lombok:省略实体类Getter、Setter等模板代码
2. 单表结构设计
你可以根据后续业务需求二选一:
方案1(嵌套字段拆分,适合后续需要按嵌套字段查询的场景)
表名建议为push_message,字段如下:
- id:bigint主键,自增
- to:varchar(255),对应JSON中message.to字段
- priority:varchar(32),对应JSON中message.priority字段
- data_deeplink:varchar(255),对应JSON中message.data.deeplink字段
- notification_title:varchar(255),对应JSON中message.notification.title字段
- notification_body:varchar(1024),对应JSON中message.notification.body字段
- notification_image:varchar(255),对应JSON中message.notification.image字段
方案2(嵌套结构存JSON,适合后续嵌套字段会频繁扩展的场景)
表名建议为push_message,字段如下:
- id:bigint主键,自增
- to:varchar(255)
- priority:varchar(32)
- data:JSON类型,存储整个message.data节点内容
- notification:JSON类型,存储整个message.notification节点内容
注:MySQL 5.7及以上版本原生支持JSON类型,查询时可直接使用JSON函数提取嵌套字段。
3. 编写请求参数接收实体
用来自动映射Postman传入的JSON结构:
// 外层请求接收实体 @Data public class PushMessageReq { private Message message; } @Data public class Message { private String to; private String priority; private DataNode data; private NotificationNode notification; } @Data public class DataNode { private String deeplink; } @Data public class NotificationNode { private String title; private String body; private String image; }
4. 编写数据库操作层代码
以MyBatis-Plus为例:
- 编写数据库实体类,字段和你选的表结构一一对应,如果选JSON存储方案,需要加类型处理器注解映射JSON字段:
@Data @TableName(value = "push_message", autoResultMap = true) public class PushMessage { @TableId(type = IdType.AUTO) private Long id; private String to; private String priority; // 仅JSON存储方案需要加下面两个注解 @TableField(typeHandler = FastjsonTypeHandler.class) private DataNode data; @TableField(typeHandler = FastjsonTypeHandler.class) private NotificationNode notification; // 字段拆分方案就替换上面两个为拆分后的普通字段即可 }
- 编写Mapper接口,直接继承MyBatis-Plus的BaseMapper即可获得基础CRUD能力:
public interface PushMessageMapper extends BaseMapper<PushMessage> { }
5. 编写业务层与控制层代码
- 控制层POST接口实现:
@RestController @RequestMapping("/api/push/message") public class PushMessageController { @Autowired private PushMessageService pushMessageService; @PostMapping public Result<Void> save(@RequestBody PushMessageReq req) { // 此处可补充入参校验,比如to、priority必填校验 pushMessageService.saveMessage(req); return Result.success(); } }
- 业务层实现:将请求参数转为数据库实体,调用Mapper插入即可
@Service public class PushMessageServiceImpl implements PushMessageService { @Autowired private PushMessageMapper pushMessageMapper; @Override public void saveMessage(PushMessageReq req) { PushMessage pushMessage = new PushMessage(); pushMessage.setTo(req.getMessage().getTo()); pushMessage.setPriority(req.getMessage().getPriority()); pushMessage.setData(req.getMessage().getData()); pushMessage.setNotification(req.getMessage().getNotification()); pushMessageMapper.insert(pushMessage); } }
6. 接口测试
启动SpringBoot项目后,在Postman中配置:
- 请求方式:POST
- 请求地址:
http://你的服务地址/api/push/message - 请求头:
Content-Type: application/json - 请求体:填入你给出的JSON结构
发送请求后查看数据库是否已生成对应数据即可。
后续CRUD扩展提示
完成POST接口后,剩余的查询、修改、删除接口可直接调用MyBatis-Plus封装的selectById、updateById、deleteById等方法快速实现,无需手动编写SQL。
内容的提问来源于stack exchange,提问作者MrStack
相关产品推荐
相关产品推荐

