请指明有效的 Swagger 或 OpenAPI 版本字段。 ... swagger: "2.0" 以及那些匹配 openapi: 3.0.n (例如,openapi: 3.0.0)

问题描述 投票:0回答:1

我正在使用 Spring MVC 5.3.23(不是 Spring Boot)+ SpringDoc 1.8

如果我访问http://localhost:8080/swagger-ui.html

它被重定向到http://localhost:8080/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config

并显示如下

enter image description here

我正在关注萨格勒宾关于 How to Integrate Open API 3 with Spring project (not Spring Boot) using springdoc-openapi

的推荐
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"org.springdoc"})
@Import({org.springdoc.core.SpringDocConfiguration.class,
         org.springdoc.webmvc.core.SpringDocWebMvcConfiguration.class,
         org.springdoc.webmvc.ui.SwaggerConfig.class,
         org.springdoc.core.SwaggerUiConfigProperties.class,
         org.springdoc.core.SwaggerUiOAuthProperties.class,
         org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration.class})
public class OpenApiConfig implements WebMvcConfigurer {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI().openapi("3.0.0")
                .info(new Info()
                    .title("iBench API")
                    .version("1.0.0");
    }

}

我已经到处搜索并花了一周的时间,但到目前为止还没有任何线索,并尝试了很多方法,但还没有运气。

有人有办法解决吗?

编辑: 有人说我需要设置

swagger: "2.0" 
或者
openapi: "3.0.0"

但是当前项目中没有SpringDoc的yaml文件。 所以,我不知道如何设置 swagger 或 openapi 版本。

==> 在 OpenApiConfig 中用完 .openapi("3.0.0") 就够了。

编辑: 啊,我发现 /v3/api-docs 返回了

"{"openapi":"3.0.0","info":{"title":"iBench API","description":"ABC"}}"

这是不正确的,正确的形式应该是

{"openapi":"3.0.0",…}

有人建议添加 StringHttpMessageConverter 但它已经作为默认转换器之一存在。我还没有修改/删除它们,所以我想我已经有了 StringHttpMessageConverter???

enter image description here

编辑:显然这是“重新序列化”问题。 这与下面另一篇文章中提到的问题类似 通过 Web API 发送的字符串会用引号括起来

问题是,我对自定义控制器没有任何问题,它们正确返回 JSON 格式的结果,但只有 /v3/api-docs 的结果被重新序列化。

所以,仍然没有找到解决方案。

java spring swagger-ui springdoc
1个回答
0
投票

啊.... Spring conf XML 文件之一中有一个自定义转换器。 这就是为什么它令人不安的结果。 XML 文件太多所以我错过了。

ByteArrayHttpMessageConverter 应该是第一个转换器,但 XML 文件内的自定义转换具有优先权。

因此可以通过将 ByteArrayHttpMessageConverter 放在自定义转换器之前来修复它,如下所示。

<mvc:message-converters>
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
    <bean class="abc.CustomMappingJacksonHttpMessageConverter" />
</mvc:message-converters>
© www.soinside.com 2019 - 2024. All rights reserved.