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

Swagger学习⑱——@Callback 注解

介绍

@Callback 是 Swagger/OpenAPI 3.0 注解库中的一个注解,用于在 OpenAPI 文档中定义回调(Callback)。回调是一种描述异步操作的机制,通常用于 Webhook 或事件驱动的 API 场景。

@Callback 注解的作用

@Callback 注解用于在 OpenAPI 文档中定义一个回调操作。回调通常用于以下场景:

  • Webhook:当某个事件发生时,API 服务器会向客户端发送一个 HTTP 请求。

  • 异步操作:当某个操作需要较长时间完成时,API 服务器会在完成后通知客户端。

  • 事件驱动架构:描述 API 如何响应外部事件。

源代码

package io.swagger.v3.oas.annotations.callbacks;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.extensions.Extension;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Callbacks.class)
@Inherited
public @interface Callback {
    String name() default "";

    String callbackUrlExpression() default "";

    Operation[] operation() default {};

    Extension[] extensions() default {};

    String ref() default "";
}

@Callback 注解的属性

@Callback 注解的主要属性如下:

属性名类型描述
nameString回调的名称,必须是唯一的。
operationOperation回调的操作定义。
refString引用外部定义的回调。
callbackUrlExpressionString回调 URL 的表达式,用于动态生成回调 URL。

示例代码

定义回调

以下是一个使用 @Callback 注解的示例,展示如何在 API 中定义回调:

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.callbacks.Callback;
import io.swagger.v3.oas.annotations.callbacks.Callbacks;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;

@RestController
public class DemoController {

    @Operation(summary = "Create an Demo", description = "Create a new Demo and register a callback for status updates")
    @Callbacks({
        @Callback(
            name = "demoStatusCallback",
            operation = @Operation(
                summary = "Callback for Demo status updates",
                responses = {
                    @ApiResponse(
                        responseCode = "200",
                        description = "Callback received successfully",
                        content = @Content(mediaType = "application/json", schema = @Schema(implementation = DemoStatus.class))
                    )
                }
            ),
            callbackUrlExpression = "http://chengxuyuanshitang.com/demo-status/{$request.body#demoId}"
        )
    })
    @PostMapping("/demos")
    public void createDemo(@RequestBody Demo  demo) {
        // 创建订单并注册回调
    }
}





http://www.kler.cn/a/500153.html

相关文章:

  • 直流无刷电机控制(FOC):电流模式
  • 依据正则表达式拦截文本
  • Jaeger UI使用、采集应用API排除特定路径
  • 如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?
  • DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细
  • Cygwin, MinGW
  • (java) String 字符串
  • simulink建模与仿真代做matlab程序代编设计帮做电力电子电机控制
  • Django Admin中添加自定义按钮与默认按钮并列
  • Objective-C语言的网络编程
  • 蓝桥与力扣刷题(389 找不同)
  • 设计一篇利用python爬虫获取1688详情API接口的长篇软文
  • 芯片:为何英伟达的GPU能在AI基础设施领域扮演重要角色?
  • 【网络协议】交换机概念与配置(第一部分)
  • _STM32关于CPU超频的参考_HAL
  • RabbitMQ介绍及安装(基于docker)
  • 服务器多节点 Grafana、Prometheus 和 Node-Exporter Docker版本部署指南
  • Bash语言的正则表达式
  • 9.java中String,StringBuilder,StringBuffer 什么区别
  • MySQL教程之:与服务器的连接和断开连接
  • 图像处理 | 图像二值化
  • 财务自动化用Python还是RPA?各有什么优缺点
  • el-tab-pane 的label怎么显示很多数据
  • 【Leetcode-找到所有数组中消失的数字】利用标记出现数组中出现过的数字解决数组中消失的数字问题
  • 【开源免费】基于SpringBoot+Vue.JS共享汽车管理系统(JAVA毕业设计)