Spring Boot 接口开发实战指南

Spring Boot 接口开发实战指南

一、基础接口开发步骤

1.1 添加必要依赖

<!-- pom.xml -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

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<User> 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<Product> 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<T> {private int code;private String message;private T data;private long timestamp = System.currentTimeMillis();// 成功响应工厂方法public static <T> ApiResponse<T> success(T data) {return new ApiResponse<>(200, "Success", data);}// 构造器、Getter/Setter省略
}

3.2 响应状态码处理

@PostMapping("/users")
public ResponseEntity<ApiResponse<User>> 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<User> register(@Valid @RequestBody UserDTO userDTO) {// 业务处理
}

4.2 全局异常处理

@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ApiResponse<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, String> 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<String> handleAllExceptions(Exception ex) {return ApiResponse.error(500, "服务器内部错误", ex.getMessage());}
}

五、接口安全增强

5.1 JWT认证集成

@PostMapping("/login")
public ApiResponse<String> 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<UserProfile> 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 {@Beanpublic FilterRegistrationBean<RateLimitFilter> rateLimitFilter() {FilterRegistrationBean<RateLimitFilter> 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 {@Beanpublic 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<User> 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 {@Autowiredprivate MockMvc mockMvc;@Testvoid testGetUser() throws Exception {mockMvc.perform(get("/api/v1/users/1").header("Authorization", "Bearer valid_token")).andExpect(status().isOk()).andExpect(jsonPath("$.data.username").value("testuser"));}
}

最佳实践总结

  1. 版本控制:接口路径包含版本号(如/api/v1
  2. 统一响应:使用标准化的响应格式
  3. 参数校验:结合Validation API进行严格校验
  4. 文档维护:集成Swagger等文档工具
  5. 安全防护:添加JWT认证和接口限流
  6. 异常处理:全局异常捕获与友好提示
  7. 测试覆盖:编写单元测试和集成测试

扩展学习

  • Spring官方REST文档
  • RESTful API设计规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形

题目 3325: 蓝桥杯2025年第十六届省赛真题-2025 图形 时间限制: 2s 内存限制: 192MB 提交: 494 解决: 206 题目描述 小蓝要画一个 2025 图形。图形的形状为一个 h w 的矩形&#xff0c;其中 h 表示图形的高&#xff0c;w 表示图形的宽。当 h 5,w 10 时&#xff0c;图形如下所…

UML 时序图 使用案例

UML 时序图 UML 时序图 (Sequence Diagram)时序图的主要元素消息类型详解时序图示例时序图绘制步骤时序图的应用场景 UML 时序图 (Sequence Diagram) 时序图是UML(统一建模语言)中用于展示对象之间交互行为的动态视图&#xff0c;它特别强调消息的时间顺序。 时序图的主要元素…

PPT连同备注页(演讲者模式)一块转为PDF

首先&#xff0c;进入创建PDF/XPS&#xff1a; 然后进入选项&#xff1a; 发布选项-发布内容里选备注页&#xff1a; 导出的原始结果是这样的&#xff1a; 这个时候裁剪一下&#xff0c;范围为所有页面&#xff1a; 最终结果&#xff1a; 如果导出不选“备注页”而是只勾选“包…

AI时代新词-多模态(Multimodal)

一、什么是多模态&#xff08;Multimodal&#xff09;&#xff1f; 多模态&#xff08;Multimodal&#xff09;是指在人工智能中&#xff0c;融合多种不同类型的信息&#xff08;如文本、图像、语音、视频等&#xff09;进行处理和分析的技术。与传统的单一模态&#xff08;例…

【图像大模型】Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南

Stable Diffusion XL&#xff1a;下一代文本到图像生成模型的技术突破与实践指南 一、架构设计与技术演进1.1 核心架构革新1.2 关键技术突破1.2.1 双文本编码器融合1.2.2 动态扩散调度 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础…

图像分割技术的实现与比较分析

引言 图像分割是计算机视觉领域中的一项基础技术&#xff0c;其目标是将数字图像划分为多个图像子区域&#xff08;像素的集合&#xff09;&#xff0c;以简化图像表示&#xff0c;便于后续分析和理解。在医学影像、遥感图像分析、自动驾驶、工业检测等众多领域&#xff0c;图…

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程

简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡&#xff0c;为千亿规模大语言模型的训练、微调和推理进行了定制优化&#xff0c;结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力&#xff0c;助力人工智能、图形渲染、多媒体、科学计算与物…

「从0到1」构建工业物联网监控系统:ARM+Quarkus+Prometheus技术栈全记录

在工业4.0浪潮中&#xff0c;边缘计算正成为智能制造的核心基础设施。ARM架构边缘计算机凭借其低功耗、高能效比和模块化设计优势&#xff0c;正在重塑工业物联网&#xff08;IIoT&#xff09;的监控体系。当Java的跨平台能力与Prometheus的实时监控体系相结合&#xff0c;为工…

【HW系列】—web常规漏洞(文件上传漏洞)

文章目录 一、简介二、危害三、文件检测方式分类四、判断文件检测方式五、文件上传绕过技术六、漏洞防御措施 一、简介 文件上传漏洞是指Web应用程序在处理用户上传文件时&#xff0c;未对文件类型、内容、路径等进行严格校验和限制&#xff0c;导致攻击者可上传恶意文件&…

如何设计ES的冷热数据分离架构?Elasticsearch 集群如何实现高可用?如何避免脑裂问题?如果出现脑裂如何恢复?

以下为Elasticsearch架构设计与高可用方案详细说明&#xff1a; 冷热架构 一、冷热数据分离架构设计&#xff08;文字描述模拟架构图&#xff09; [Hot Layer] │ ├─ SSD节点组&#xff08;3节点&#xff09; │ ├─ 角色&#xff1a;ingest/data/hot │ ├─ 存…

Trivy 镜像漏洞扫描:从零入门到实战指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——手把手带你掌握容器安全核心工具 一、安装配置&#xff1a;三步完成 Trivy 部署 Trivy 是由 Aqua Security 开发的开源容器安全工具&#xff0c;支持…

SQL基础概念以及SQL的执行方式

1. SQL入门 1.1. SQL语言功能 可以把 SQL 语言按照功能划分成以下的 4 个部分&#xff1a; DDL&#xff0c;英文叫做 Data Definition Language&#xff0c;也就是数据定义语言&#xff0c;它用来定义我们的数据库对象&#xff0c;包括数据库、数据表和列。通过使用 DDL&…

Rust 1.0 发布十周年,梦想再度扬帆起航!

目录 引言&#xff1a;发布十周年&#xff0c;锋芒露今朝 一、Rust的诞生&#xff1a;源于安全的初心 二、Rust 1.0&#xff1a;十年耕耘&#xff0c;硕果累累 三、核心利器&#xff1a;安全、并发与性能的十年锤炼 四、生态与应用&#xff1a;十年拓展&#xff0c;遍地开…

x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力

一、引言 汇编语言是硬件与软件的桥梁&#xff0c;x86 和 ARM 作为两大主流架构&#xff0c;其汇编语言在设计理念、指令集、编程风格上差异显著。本文以 x86 汇编为核心&#xff0c;结合与 ARM 的对比&#xff0c;解析 x86 汇编的技术细节与应用场景&#xff0c;助力开发者深…

入驻面包多了

前言 入驻面包多了&#xff0c;其实已经开通面包多账号老久了&#xff0c;一直没有认证&#xff0c;因为没什么拿得出手的作品。 后边会努力沉淀&#xff0c;希望能出一些作品&#xff0c;给大家带来一些帮助&#xff0c;然后能赚到一些些奶茶钱。 一个小工具 上架了一个Win…

Python----目标检测(MS COCO数据集)

一、MS COCO数据集 COCO 是一个大规模的对象检测、分割和图像描述数据集。COCO有几个 特点&#xff1a; Object segmentation&#xff1a;目标级的分割&#xff08;实例分割&#xff09; Recognition in context&#xff1a;上下文中的识别&#xff08;图像情景识别&#xff0…

【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析

【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用&#xff1a;从配置到函数调用全解析 前言 在人工智能应用开发领域&#xff0c;大语言模型&#xff08;LLM&#xff09;的集成能力至关重要。NVIDIA作为全球领先的GPU厂商&#xff0c;其LLM API提供了对Meta Llama-3.…

通用的管理账号设置设计(一)

背景 首先说明一下需求背景&#xff1a; 在整个角色分类中分为管理员和用户&#xff0c;用户可以分为很多级别&#xff0c;比如用户处于哪个组&#xff08;group&#xff09;&#xff0c;用户处于哪个site&#xff08;城市&#xff09;。管理员可以&#xff1a; 2.1 锁定整个…

第5章 软件工程基础知识

5.2 软件过程模型 掌握常见软件开发模型的基本概念。 瀑布模型&#xff1a;各阶段的固定顺序&#xff0c;如同瀑布流水。适用于需求明确&#xff0c;且很少发生较大变化的项目。 演化模型&#xff1a; 原型模型&#xff1a;适用于用户需求不清&#xff0c;需求经常变化的情况…

深浅拷贝?

一、定义&#xff1a; 浅拷贝&#xff1a;只复制对象的第一层属性&#xff0c;若第一层属性是引用类型&#xff08;如对象、数组&#xff09;&#xff0c;则复制其内存地址&#xff0c;修改拷贝后的嵌套对象会影响原对象。 深拷贝&#xff1a;递归复制对象的所有层级&#xf…