Swagger学习⑧——@Parameters注解

介绍

@Parameters 注解是 Swagger Core 库的一部分,属于 Swagger/OpenAPI 3.x。它用于在 API 操作中同时描述多个参数。与 @Parameter 注解不同,@Parameters 是一个容器注解,可以包含多个 @Parameter 注解,从而更简洁地描述多个参数。

作用

@Parameters 注解的主要作用是将多个 @Parameter 注解组合在一起,方便在一个方法中描述多个参数。它通常用于以下场景:

  • 当一个 API 操作需要多个参数时,可以使用 @Parameters 来集中管理这些参数的元数据。

  • 提高代码的可读性和可维护性。

源代码

package io.swagger.v3.oas.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Parameters {
    Parameter[] value() default {};
}

示例代码

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
@Tag(name = "Demo管理", description = "Demo相关的 API")
public class DemoController {

    @Operation(
        summary = "搜索Demo",
        description = "根据多个条件搜索Demo",
        responses = {
            @ApiResponse(responseCode = "200", description = "成功搜索到Demo")
        }
    )
    @Parameters({
        @Parameter(
            name = "name",
            description = "Demo名",
            required = false,
            example = "John",
            in = ParameterIn.QUERY
        ),
        @Parameter(
            name = "info",
            description = "Demo info",
            required = false,
            example = "25",
            in = ParameterIn.QUERY
        ),
        @Parameter(
            name = "city",
            description = "Demo所在城市",
            required = false,
            example = "New York",
            in = ParameterIn.QUERY
        )
    })
    @GetMapping("/demos/search")
    public String searchDemors(
        @RequestParam(required = false) String name,
        @RequestParam(required = false) Integer info,
        @RequestParam(required = false) String city) {
        return "Searching for Demo with name: " + name + ", info: " + info + ", city: " + city;
    }
}




### 集成 Swagger JSON 文件到 Flask 为了在 Flask 中集成 Swagger JSON 文件以实现 API 文档化,可以通过多种方式完成此操作。以下是详细的说明: #### 方法一:使用 `Flask-Swagger` 自动生成 Swagger JSON 和文档 `Flask-Swagger` 可以从代码中的 docstrings 或 YAML 文件中提取注释,并将其转换为符合 Swagger 标准的 JSON 文件[^4]。 下面是一个简单的例子来演示如何配置 `Flask-Swagger` 来生成 Swagger JSON 文件: ```python from flask import Flask, jsonify import flask_swagger app = Flask(__name__) @app.route("/swagger", methods=["GET"]) def swagger(): return flask_swagger.swagger(app) @app.route('/example', methods=['POST']) def example(): """ This is an example endpoint. --- parameters: - name: body in: body required: true schema: type: object properties: key: type: string responses: 200: description: Success response """ data = {"message": "Success"} return jsonify(data), 200 if __name__ == "__main__": app.run(debug=True) ``` 上述代码展示了如何通过 docstring 注解来自动生成 Swagger JSON 并暴露 `/swagger` 接口供访问。 --- #### 方法二:使用 `Flask-Swagger-UI` 提供交互式文档界面 如果希望提供更直观的用户体验,可以结合 `Flask-Swagger-UI` 实现动态展示和交互测试的功能[^3]。以下是如何设置的一个实例: 安装依赖项: ```bash pip install flask-swagger-ui ``` 然后,在应用程序中引入并初始化 `flask_swagger_ui.SwaggerUIBlueprint`: ```python from flask import Flask from flask_swagger_ui import get_swaggerui_blueprint app = Flask(__name__) SWAGGER_URL = '/api/docs' # URL for exposing Swagger UI (without trailing '/') API_URL = '/static/swagger.json' # Our Swagger JSON file location # Call factory function to create our blueprint swaggerui_blueprint = get_swaggerui_blueprint( SWAGGER_URL, API_URL, config={ 'app_name': "Test application" } ) app.register_blueprint(swaggerui_blueprint, url_prefix=SWAGGER_URL) @app.route("/") def hello_world(): return "Hello, this is your Flask API!" if __name__ == "__main__": app.run() ``` 在此方法下,Swagger UI 页面会被加载至指定路径(如 `/api/docs`),并通过静态文件夹内的 Swagger JSON 文件渲染接口描述。 --- #### 方法三:手动创建 Swagger JSON 文件并与 Flask 结合 对于某些特定需求,可能需要完全控制 Swagger JSON 的结构,则可以选择手写 JSON 文件并将之嵌入到 Flask 应用程序中。例如,将 JSON 存储在一个名为 `swagger.json` 的文件里,再通过 Flask 返回该文件的内容作为 HTTP 响应。 示例代码如下所示: ```python from flask import Flask, send_from_directory app = Flask(__name__, static_folder='.') @app.route('/swagger') def serve_swagger_json(): return send_from_directory('.', 'swagger.json') if __name__ == '__main__': app.run(port=8080) ``` 这里假设当前目录存在一个命名为 `swagger.json` 的有效 OpenAPI/Swagger 规格定义文件[^1]。 --- ### 总结 以上三种方案分别适用于不同场景下的需求——自动化程度高、用户友好性强或者高度定制化的解决方案均可满足实际开发过程中的多样化诉求。具体采用哪种取决于项目的复杂度以及团队的技术偏好等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值