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

Springfox boot starter招摇过市瞬间操控

巩光誉
2023-03-14

我对使用SpringBoot和Springfox-boot-starter的swagger文档有一个问题。

我使用java.time.Instant java.util.Optio包裹

  @GetMapping("/{subscriptionId}/{variableAlias}")
  public PaginatedResultDTO<MonitoredVariableDTO> getReportedVariables(
    @PathVariable String subscriptionId, 
    @PathVariable String variableAlias, 
    Optional<Instant> from, 
    Optional<Instant> to) { ... }

有没有办法让这个工作与可选的?感谢任何建议!

Spring启动版本:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath />
</parent>

Springfox-boot-starter版本

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

共有2个答案

田成仁
2023-03-14

spring fox的问题是它不使用您定义为< code>Bean的自定义< code>ObjectMapper。

Springfox使用new关键字创建自己的ObjectMapper。因此,您向自定义对象映射器注册的任何模块对于SpringFox来说都是毫无意义的。但是,Springfox提供了一个接口,用于将模块注册到它自己的ObjectMapper

在项目中创建一个如下所示的配置bean,它应该可以工作。

@Configuration
public class ObjectMapperModuleRegistrar implements JacksonModuleRegistrar {
  @Override
  public void maybeRegisterModule(ObjectMapper objectMapper) {
    objectMapper.registerModule(new ParameterNamesModule())
        .registerModule(new Jdk8Module())
        .registerModule(new JavaTimeModule())
        .findAndRegisterModules();
  }
}
毛景曜
2023-03-14

我们遇到了和你完全一样的问题。我们用SpringFox的配置解决了这个问题:

@Configuration
@EnableSwagger2
public class SpringfoxConfiguration {

    @Value("${api-doc.version}")
    private String apiInfoVersion;

    @Autowired
    private TypeResolver typeResolver;
    @Bean
    public Docket customDocket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("xxx")
                //Some other code unrelated to this problem
                .alternateTypeRules(
                        // Rule to correctly process Optional<Instant> variables
                        // and generate "type: string, format: date-time", as for Instant variables,
                        // instead of "$ref" : "#/definitions/Instant"
                        AlternateTypeRules.newRule(
                                typeResolver.resolve(Optional.class, Instant.class),
                                typeResolver.resolve(Date.class), 
                                Ordered.HIGHEST_PRECEDENCE
                        ))
                .genericModelSubstitutes(Optional.class)
                .select()
                //Some more code unrelated to this problem
                .build();
    }
}
 类似资料:
  • 我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger 这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://loc

  • 我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。

  • 我正在使用Swagger注释和SpringFox为我的REST API(使用Sprint Boot构建)生成Swagger规范。我正在用将返回的代码注释每个方法。例如: 然而,有些东西(我假设SpringFox)正在向每个API调用添加一个200响应代码,而不管它是否已定义。我知道我可以通过在每个方法中添加注释来删除此项,但a)这似乎是@ApiResponse定义的不必要重复,b)某些方法可能返回

  • 已安装Java版本8更新271。 从这个链接下载了swagger-codemen-cli版本2.4.17 当我运行命令生成时,我得到以下问题 我必须使用这个JSON,但我也测试了这个样本JSON 对于2.4.7 rc1,我得到以下错误: 试着一步一步地找到答案。没找到。 任何指针都是有用的 尚卡尔

  • 我试图通过Swagger UI记录在供应商产品(WSO2 ESB)中开发的现有API服务,以供公司内部使用。供应商产品不支持招摇过市。我计划以编程方式检查/处理API服务的源代码(编写在供应商产品中),并在中生成一个包含swagger定义文件的目录/文件夹/库。json或。yml格式。那很好,我能做到。 这些api定义文件中的每一个都将在swagger UI中很好地呈现,我正在考虑使用https:

  • 我使用Springfox从Spring Boot REST控制器生成了Swagger API规范。 我注意到一个问题,示例值/模型无法显示响应。 作为调查,我在http://localhost:8080/v2/api-文档,并在https://editor.swagger.io/,它也无法显示示例值/模型。这似乎是由于模式没有正确引用模型对象(“Car”)造成的。 但是从Swagger的API文档