我正在使用 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
并显示如下
我正在关注萨格勒宾关于 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???
编辑:显然这是“重新序列化”问题。 这与下面另一篇文章中提到的问题类似 通过 Web API 发送的字符串会用引号括起来
问题是,我对自定义控制器没有任何问题,它们正确返回 JSON 格式的结果,但只有 /v3/api-docs 的结果被重新序列化。
所以,仍然没有找到解决方案。
啊.... Spring conf XML 文件之一中有一个自定义转换器。 这就是为什么它令人不安的结果。 XML 文件太多所以我错过了。
ByteArrayHttpMessageConverter 应该是第一个转换器,但 XML 文件内的自定义转换具有优先权。
因此可以通过将 ByteArrayHttpMessageConverter 放在自定义转换器之前来修复它,如下所示。
<mvc:message-converters>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean class="abc.CustomMappingJacksonHttpMessageConverter" />
</mvc:message-converters>