Spring Boot 开发接口指南

Spring Boot 开发接口指南

开发思路

写接口的本质是:Controller 接收请求 → Service 处理业务 → Mapper 操作数据库,三层各司其职。


1. Controller 层(接收请求)

java 复制代码
@RestController           // = @Controller + @ResponseBody(返回JSON)
@RequestMapping("/api")  // 路由前缀
public class UserController {

    @Autowired           // 注入 Service
    private UserService userService;
    
    // 路由注解
    @GetMapping("/user/{id}")      // GET 请求(查询)
    @PostMapping("/user")           // POST 请求(创建)
    @PutMapping("/user")           // PUT 请求(更新)
    @DeleteMapping("/user/{id}")    // DELETE 请求(删除)
    
    // 参数注解
    @PathVariable Long id           // 路径参数 /user/1
    @RequestBody @Valid User user   // 请求体 + 参数校验
    @RequestParam String name       // URL查询参数 ?name=xxx
    
    public Result<User> getUser(@PathVariable Long id) {
        User user = userService.getById(id);
        return Result.success(user);
    }
}

常用请求参数注解

注解 用途 示例
@PathVariable 路径参数 /user/{id}
@RequestBody JSON请求体 POST JSON数据
@RequestParam URL参数 ?page=1&size=10
@RequestHeader 请求头 获取Header信息

2. Service 层(业务逻辑)

java 复制代码
@Service  // 标记为业务层组件,自动纳入IOC容器
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getById(Long id) {
        // 业务逻辑处理
        return userMapper.findById(id);
    }
    
    public void addUser(User user) {
        // 参数校验、业务处理
        userMapper.insert(user);
    }
}

3. Mapper 层(数据访问)

MyBatis 写法

java 复制代码
@Mapper  // MyBatis 注解,自动生成Mapper实现
public interface UserMapper {
    
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);
    
    @Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
    @Options(useGeneratedKeys = true, keyProperty = "id")  // 自动生成主键
    void insert(User user);
    
    @Update("UPDATE user SET name = #{name} WHERE id = #{id}")
    void update(User user);
    
    @Delete("DELETE FROM user WHERE id = #{id}")
    void delete(Long id);
}

MyBatis-Plus 写法(更简洁)

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 继承 BaseMapper 后,CRUD 自动生成
    // selectById, insert, updateById, deleteById 等方法自带
}

4. Entity 层(数据模型)

java 复制代码
@Data                     // Lombok:自动生成getter/setter/toString
@NoArgsConstructor        // 无参构造
@AllArgsConstructor       // 全参构造
@TableName("sys_user")   // 指定表名(可选,不指定默认用类名)
public class User {
    
    @TableId(type = IdType.AUTO)  // 主键自增
    private Long id;
    
    private String name;
    
    private String email;
    
    @TableField(fill = FieldFill.INSERT)  // 自动填充
    private LocalDateTime createTime;
}

核心注解一览

Controller 层

注解 作用
@RestController 声明REST接口(返回JSON)
@Controller 声明控制器(返回视图)
@RequestMapping 通用路由映射
@GetMapping GET请求
@PostMapping POST请求
@PutMapping PUT请求
@DeleteMapping DELETE请求

Bean 声明

注解 作用 使用场景
@Component 通用组件 通用Bean
@Service 业务层 Service类
@Repository 数据层 Mapper/Dao类
@Controller 控制器 Controller类
@Configuration 配置类 配置类

依赖注入

注解 作用
@Autowired 按类型注入(Spring)
@Resource 按名称注入(JDK)
@Qualifier 指定具体Bean名称

数据层

注解 作用
@Mapper 声明MyBatis Mapper
@TableName 指定表名
@TableId 主键映射
@TableField 字段映射

Lombok 常用注解

注解 作用
@Data 生成getter/setter/toString/equals
@Getter 只生成getter
@Setter 只生成setter
@NoArgsConstructor 无参构造
@AllArgsConstructor 全参构造
@Builder 建造者模式

完整示例

UserController.java

java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/{id}")
    public Result<User> getUser(@PathVariable Long id) {
        User user = userService.getById(id);
        return Result.success(user);
    }
    
    @PostMapping
    public Result<Void> addUser(@RequestBody @Valid User user) {
        userService.addUser(user);
        return Result.success();
    }
}

UserService.java

java 复制代码
@Service
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getById(Long id) {
        return userMapper.selectById(id);
    }
    
    public void addUser(User user) {
        userMapper.insert(user);
    }
}

UserMapper.java

java 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // MyBatis-Plus 自动提供 CRUD 方法
}

User.java

java 复制代码
@Data
@TableName("sys_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private String email;
}

统一响应封装

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;    // 状态码
    private String message; // 提示信息
    private T data;         // 数据
    
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "success", data);
    }
    
    public static <T> Result<T> success() {
        return new Result<>(200, "success", null);
    }
    
    public static <T> Result<T> error(String message) {
        return new Result<>(500, message, null);
    }
}

整理时间: 2026-03-18

相关推荐
hero.fei21 小时前
在springboot中使用Resilience4j
java·spring boot·后端
爱码少年21 小时前
SpringBoot web工程同时启动多个HTTP端口
spring boot
希望永不加班21 小时前
SpringBoot 定时任务:@Scheduled 基础与动态定时
java·spring boot·后端·spring
ACGkaka_21 小时前
SpringBoot 实战(四十一):集成 Elasticsearch
spring boot·elasticsearch·jenkins
小江的记录本1 天前
【JEECG Boot】 《JEECG Boot 数据字典使用教程》(完整版)
java·前端·数据库·spring boot·后端·spring·mybatis
i220818 Faiz Ul1 天前
教育资源共享平台|基于springboot + vue教育资源共享平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·教育资源共享平台
玛卡巴卡ldf1 天前
【Springboot7】ApachePOI文件导入导出
java·spring boot·sql
Devin~Y1 天前
大厂 Java 面试实战:从电商微服务到 AI 智能客服(含 Spring 全家桶、Redis、Kafka、RAG/Agent 解析)
java·spring boot·redis·elasticsearch·spring cloud·docker·kafka
珍朱(珠)奶茶1 天前
Spring Boot3整合FreeMark、itextpdf 5/7 实现pdf文件导出及注意问题
java·spring boot·后端·pdf·itextpdf
小江的记录本1 天前
【JEECG Boot】 JEECG Boot 数据字典管理——六大核心功能(内含:《JEECG Boot 数据字典开发速查清单》)
java·前端·数据库·spring boot·后端·spring·mybatis