当前位置: 首页 > news >正文

Swagger 3.0 中注解详细示例

Swagger 3.0 提供了丰富的注解来详细描述 API 的请求和响应。以下是一个使用 @Operation@Parameter@RequestBody@ApiResponse 注解的示例,展示了如何设置请求头、请求参数、路径变量、请求体和响应体。代码中未使用 DTO 对象,而是使用 Map 来传递参数和响应。通过 @Parameter 注解,可以定义查询参数、路径变量和请求头。@RequestBody 注解用于描述请求体的结构,而 @ApiResponse 注解则用于定义成功的响应内容。此示例展示了如何在 Swagger 中详细描述 API 的各个部分,帮助开发者理解和使用 API。

为了演示如何详细设置每个请求头、请求参数、路径变量、请求体、响应体,下面的代码没有使用 DTO 对象,参数和响应都使用的 Map。

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.StringToClassMapItem;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;import java.util.Map;@RestController
@RequestMapping("/api/swagger/example")
@Tag(name = "Swagger测试", description = "提供用户的基本增删查操作")
public class SwaggerExampleController {@PostMapping("/create/{tenantId}")@Operation(summary = "创建新用户",description = "根据请求体中的参数创建一个新用户,返回创建的用户信息",parameters = {@Parameter(name = "type",description = "参数type",in = ParameterIn.QUERY,schema = @Schema(type = "string", example = "T001")),@Parameter(name = "tenantId",in = ParameterIn.PATH,schema = @Schema(type = "string", example = "tenant-001")),@Parameter(name = "Authorization",description = "认证令牌",required = true,in = ParameterIn.HEADER,schema = @Schema(type = "string", example = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")),@Parameter(name = "Request-Id",description = "请求追踪ID",required = true,in = ParameterIn.HEADER,schema = @Schema(type = "string", example = "req-123456789"))},requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody(required = true,description = "用户信息,包括用户名和邮箱",content = @Content(mediaType = "application/json",schema = @Schema(type = "object",requiredProperties = {"name", "email"},properties = {@StringToClassMapItem(key = "name",value = String.class),@StringToClassMapItem(key = "email",value = String.class)}))),responses = {@ApiResponse(responseCode = "200", description = "用户创建成功",content = @Content(mediaType = "application/json",schema = @Schema(type = "object",properties = {@StringToClassMapItem(key = "id", value = Long.class),@StringToClassMapItem(key = "name", value = String.class),@StringToClassMapItem(key = "email", value = String.class),@StringToClassMapItem(key = "tenantId", value = String.class),@StringToClassMapItem(key = "authorization", value = String.class),@StringToClassMapItem(key = "requestId", value = String.class)})))})public Map<String, Object> create(@RequestParam("type") String type,@PathVariable("tenantId") String tenantId,@RequestHeader("Authorization") String authorization,@RequestHeader("Request-Id") String requestId,@RequestBody Map<String, Object> userMap) {userMap.put("type", type);userMap.put("id", 1001L); // 模拟生成的IDuserMap.put("tenantId", tenantId); // 添加租户IDuserMap.put("authorization", authorization);userMap.put("requestId", requestId);return userMap;}}

(END)

http://www.xdnf.cn/news/361621.html

相关文章:

  • Linux云计算训练营笔记day05(Rocky Linux中的命令:管道操作 |、wc、find、vim)
  • linux mcelog inject注入
  • 21.第二阶段x64游戏实战-分析采集物偏移
  • C语言printf使用错误导致程序崩溃
  • 39-算法打卡-二叉树-基础知识-第三十九天
  • C#里创建一个MaterialDesign3的导航条
  • uni-app使用web-view组件APP实现返回上一页
  • 机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]
  • 商业 |阿里云又丢出了核弹
  • Webug4.0靶场通关笔记24- 第29关Webshell爆破
  • 华为OceanStor 5500 V3存储证书过期问题处理
  • 在SpringBoot中使用MQTT实现消息的订阅
  • Element-UI字体图标不显示
  • Oracle — 数据管理
  • LVGL源码学习之渲染、更新过程(2)---无效区域的处理
  • 电厂数据库未来趋势:时序数据库 + AI 驱动的自优化系统
  • 期货跟单软件如何对实盘进行风控?
  • go语言封装、继承与多态:
  • 【A2A】管中窥豹,google源码python-demo介绍
  • Go语言中 源文件开头的 // +build 注释的用法
  • 母亲节祝福网页制作
  • 推荐一个很方便的浏览器管理插件Wetab插件
  • 水印云:AI赋能,让图像处理变得简单高效
  • VSCode如何解决打开html页面中文乱码的问题
  • 工业软件自主化突围:RTOS 如何打破 “协议栈 - 控制器” 生态垄断
  • 零件画图实战提升案例(上)
  • 企业高性能WEB服务器—Nginx
  • 【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别
  • 深度解析动态IP业务核心场景:从技术演进到行业实践
  • 住宅IP的深度解析与合理运用