You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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为例:

  1. 编写数据库实体类,字段和你选的表结构一一对应,如果选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;
    // 字段拆分方案就替换上面两个为拆分后的普通字段即可
}
  1. 编写Mapper接口,直接继承MyBatis-Plus的BaseMapper即可获得基础CRUD能力:
public interface PushMessageMapper extends BaseMapper<PushMessage> {
}

5. 编写业务层与控制层代码

  1. 控制层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();
    }
}
  1. 业务层实现:将请求参数转为数据库实体,调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:54:05