当前位置: 首页 > 知识库问答 >
问题:

如何将文件内容传递给swagger@ExampleProperty注释值?

蓬弘
2023-03-14

我正在使用Swagger3.0.0-Snapshot为我的Spring Boot应用程序创建文档。我的maven依赖项是

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-webmvc</artifactId>
            <version>3.0.0-SNAPSHOT</version>
        </dependency>

我的swagger配置类尽可能简单:

@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
    @Bean
    public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .select()
         .apis(RequestHandlerSelectors.basePackage("com.mycompany.cs"))
                .paths(PathSelectors.any())
                .build()
                .pathMapping("/")
                .useDefaultResponseMessages(false);
    }

而我的controller方法有以下注释:

@ApiOperation(value = "Hello world", httpMethod = "POST")
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "OK",
                    examples = @Example(value = @ExampleProperty(mediaType = "application/json",
                            value = exampleValue)))
    })

json文件的内容必须显示在Swagger UI的示例字段中。

共有1个答案

吕胤
2023-03-14

好消息是,Swagger正在使用Spring,并且有可能使用DI的力量。

例如,您希望向ServiceModelToSwagger2MapperImpl添加新功能。创建扩展它的自己的组件并将其标记为主组件。Spring将自动生成ServiceModelToSwagger2Mapper抽象类的实现。

@Component
@Primary
@Slf4j
public class ServiceModelToSwagger2MapperExtensionImpl extends ServiceModelToSwagger2MapperImpl {

例如,您希望它读取文件的内容并将其放入示例字段:

@Override
protected Map<String, Response> mapResponseMessages(Set<ResponseMessage> from) {
    Map<String, Response> responses = super.mapResponseMessages(from);
    responses.forEach((key, response)-> {
        Map<String, Object> examples = response.getExamples();
        examples.entrySet().forEach(example -> {
            Object exampleObject = example.getValue();
            if (exampleObject instanceof String) {
                String exampleValue = (String) exampleObject;
                if (exampleValue.startsWith("file:")) {
                    String fileContent = readFileContent(exampleValue);
                    example.setValue(fileContent);
                }
            }});
    });

    return responses;
}

private String readFileContent(String example) {
    String fileContent = "";
    try {
        String fileName = example.replace("file:", "");
        File resource = new ClassPathResource(fileName).getFile();
        if(resource.exists()) {
            fileContent
                    = new String(Files.readAllBytes(resource.toPath()));
        }
    } catch (
            IOException e) {
        log.error("Cannot read swagger documentation from file {}", example);
    }
    return fileContent;
}
@ApiResponses(value = {
        @ApiResponse(code = 200, message = "OK",
                examples = @Example(value = @ExampleProperty(mediaType = "application/vnd.siren+json",
                        value = "file:/data/controller-responses/reponse.json")))
})
 类似资料:
  • 假设我有一个带有属性的注释: 我想创建一个包含多个元注释的复合注释,包括一个带有属性的注释 有没有一种方法可以将复合注释的属性传递给其中一个元注释? 例如,类似这样的东西: 这相当于,但比 谢谢! PS为我对示例注释的错误选择表示歉意-我没有javax。注射@记住命名注释,只是一些具有属性的任意注释。 谢谢大家的回答/评论。 这显然是不可能的。然而,碰巧我的案例有一个简单的解决方法,我将与大家分享

  • 如果我手动生成一个带有swagger-codemen-cli的客户端API,比如: ... 然后我会得到我需要的所有课程。 但是如果从maven内部运行swagger codegen maven插件,如何传递参数——完全解析? 如果没有完全解析,我会错过几个类,比如InlineResponse200。 最好的问候Fredrik

  • 我是uber Cadence的新手,尝试编写一个cron调度任务。Cadence提供了一个cron附表注释(在网上找个例子),它需要一个cron表达式字符串,用于在特定时间触发方法。但是,我想让这个cron表达式按照我们在yml文件中设置的来加载。有什么方法可以做到吗?我目前只找到了这个@cron附表注释的方法来做。我还发现有一个Workflow Option可以设置cron附表。但是,不知道如何

  • 我正在使用注释处理来生成一些类...我有两个模块,处理器本身和使用它的“客户端”模块。我想通过客户端向处理器传递一个参数,我可以这样做 如何在处理器端检索此参数?

  • 我将使用而不是绑定用户输入并将其写入数据库。当将请求处理程序方法(book book)中的数据绑定为book对象时,我感到困惑,那么我应该如何将该对象传递给数据库呢?通常使用,我根据我的模型类逐个变量绑定用户输入,然后使用相关的DAO方法将它们发送到db。我在下面展示我的课程。如果我使用,谁能说出我的请求处理程序方法应该是什么样子? 模型类: 控制器: 公共类簿记员{

  • 问题内容: 我创建了一个参数化的Jenkins作业,该作业将变量从Java传递到。 这是Java: 所以这很简单,因为我只是将s 传递给工作。但是,我现在想使用Jenkins中的A将A传递给工作。 我看到的一件事是Jenkins中的拥有一个和。因此,甚至不知道如何从Java将其设置为参数。 这可能吗? 问题答案: 这是一个可运行的类。使用apache-httpclient(4.5.1)和相关的ja