Spring Boot 接口开发实战指南
Spring Boot 接口开发实战指南
一、基础接口开发步骤
1.1 添加必要依赖
org.springframework.boot spring-boot-starter-web
1.2 创建第一个REST接口
@RestController @RequestMapping("/api/v1") public class HelloController { // 简单GET请求 @GetMapping("/hello") public String sayHello() { return "Hello Spring Boot!"; } // 带路径参数的GET请求 @GetMapping("/users/{id}") public ResponseEntity getUser(@PathVariable Long id) { User user = userService.findById(id); return ResponseEntity.ok(user); } }
二、核心注解详解
2.1 常用注解对照表
注解 | 作用 | 示例场景 |
---|---|---|
@RestController | 组合注解(@Controller + @ResponseBody) | REST接口类声明 |
@RequestMapping | 定义请求映射基础路径 | 类级别路径定义 |
@GetMapping | 处理GET请求 | 查询操作 |
@PostMapping | 处理POST请求 | 新增操作 |
@PutMapping | 处理PUT请求 | 更新操作 |
@DeleteMapping | 处理DELETE请求 | 删除操作 |
@RequestBody | 绑定请求体到方法参数 | 接收JSON请求体 |
@RequestParam | 绑定查询参数到方法参数 | 分页参数接收 |
2.2 参数接收方式对比
// 路径参数 @GetMapping("/products/{productId}") public Product getProduct(@PathVariable String productId) { ... } // 查询参数 @GetMapping("/search") public List searchProducts( @RequestParam String keyword, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { ... } // 请求体参数 @PostMapping("/orders") public Order createOrder(@Valid @RequestBody OrderDTO orderDTO) { ... } // 文件上传 @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { ... }
三、接口响应规范
3.1 统一响应格式
public class ApiResponse { private int code; private String message; private T data; private long timestamp = System.currentTimeMillis(); // 成功响应工厂方法 public static ApiResponse success(T data) { return new ApiResponse(200, "Success", data); } // 构造器、Getter/Setter省略 }
3.2 响应状态码处理
@PostMapping("/users") public ResponseEntity createUser(@Valid @RequestBody User user) { User createdUser = userService.create(user); return ResponseEntity .status(HttpStatus.CREATED) .body(ApiResponse.success(createdUser)); }
四、接口验证与异常处理
4.1 参数校验示例
public class UserDTO { @NotBlank(message = "用户名不能为空") @Size(min = 3, max = 20, message = "用户名长度3-20个字符") private String username; @Email(message = "邮箱格式不正确") private String email; // Getter/Setter } @PostMapping("/register") public ApiResponse register(@Valid @RequestBody UserDTO userDTO) { // 业务处理 }
4.2 全局异常处理
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ApiResponse handleValidationExceptions( MethodArgumentNotValidException ex) { Map errors = new HashMap(); ex.getBindingResult().getAllErrors().forEach(error -> { String fieldName = ((FieldError) error).getField(); String errorMessage = error.getDefaultMessage(); errors.put(fieldName, errorMessage); }); return ApiResponse.error(400, "参数校验失败", errors); } @ExceptionHandler(Exception.class) public ApiResponse handleAllExceptions(Exception ex) { return ApiResponse.error(500, "服务器内部错误", ex.getMessage()); } }
五、接口安全增强
5.1 JWT认证集成
@PostMapping("/login") public ApiResponse login(@RequestBody LoginRequest request) { if (authService.authenticate(request)) { String token = JwtUtil.generateToken(request.getUsername()); return ApiResponse.success(token); } return ApiResponse.error(401, "认证失败"); } @GetMapping("/profile") public ApiResponse getProfile( @RequestHeader("Authorization") String token) { String username = JwtUtil.validateToken(token); UserProfile profile = userService.getProfile(username); return ApiResponse.success(profile); }
5.2 接口限流配置
@Configuration public class RateLimitConfig { @Bean public FilterRegistrationBean rateLimitFilter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new RateLimitFilter(100)); // 100请求/秒 registration.addUrlPatterns("/api/*"); return registration; } }
六、接口文档生成
6.1 Swagger集成配置
@Configuration @OpenAPIDefinition(info = @Info( title = "电商平台API文档", version = "1.0", description = "电商平台接口文档" )) public class SwaggerConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .components(new Components()) .info(new Info().title("电商平台API文档")); } }
6.2 接口注解示例
@Operation(summary = "获取用户详情") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "成功获取用户信息"), @ApiResponse(responseCode = "404", description = "用户不存在") }) @GetMapping("/users/{id}") public ResponseEntity getUser( @Parameter(description = "用户ID") @PathVariable Long id) { // ... }
七、接口测试方法
7.1 Postman测试示例
POST http://localhost:8080/api/v1/login Content-Type: application/json { "username": "testuser", "password": "Test123!" }
7.2 单元测试示例
@SpringBootTest @AutoConfigureMockMvc class UserControllerTest { @Autowired private MockMvc mockMvc; @Test void testGetUser() throws Exception { mockMvc.perform(get("/api/v1/users/1") .header("Authorization", "Bearer valid_token")) .andExpect(status().isOk()) .andExpect(jsonPath("$.data.username").value("testuser")); } }
最佳实践总结
- 版本控制:接口路径包含版本号(如/api/v1)
- 统一响应:使用标准化的响应格式
- 参数校验:结合Validation API进行严格校验
- 文档维护:集成Swagger等文档工具
- 安全防护:添加JWT认证和接口限流
- 异常处理:全局异常捕获与友好提示
- 测试覆盖:编写单元测试和集成测试
扩展学习:
- Spring官方REST文档
- RESTful API设计规范
(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。