关于通过Swagger2,升级2.10问题,查看接口浏览器跳出Unable to infer base url. This is common when using dynamic

本文详细介绍了如何将Swagger升级到最新2.10版本,包括注解变更,从@EnableSwagger2改为@EnableSwagger2WebMvc或@EnableSwagger2WebFlux,以及maven依赖项的调整,新增了针对WebFlux的支持。
部署运行你感兴趣的模型镜像

今天想通过swagger测试接口启动服务后却跳出

(1)、2.10开始支持两种模式:WebFlux,WebMVC

注解已经修改,不支持@EnableSwagger2了,修改为以下两种,请选择一种:

@EnableSwagger2WebMvc
@EnableSwagger2WebFlux
public class Swagger2Config {

(2)maven依赖变化,之前是两个,现在为3个依赖

 [webflux]

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-webflux</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>

[webmvc]

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

以上是升级swagger2最新的2.10版本的方法。

您可能感兴趣的与本文相关的镜像

FLUX.1-dev

FLUX.1-dev

图片生成
FLUX

FLUX.1-dev 是一个由 Black Forest Labs 创立的开源 AI 图像生成模型版本,它以其高质量和类似照片的真实感而闻名,并且比其他模型更有效率

### 问题分析 在Spring与SpringMVC整合Swagger2时,出现“Unable to infer base url”错误,通常是由于Swagger无法正确推断API的基础URL。这种问题可能由以下原因引起: 1. 动态Servlet注册导致Swagger无法自动检测基础路径[^1]。 2. API网关或反向代理的存在干扰了Swagger对基础URL的解析[^1]。 3. 配置文件中未正确映射Swagger资源[^3]。 ### 解决方案 #### 方法一:手动设置基础URL 可以通过配置Swagger的Docket对象,手动指定基础路径。例如,在Swagger配置类中添加以下代码: ```java @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .host("example.org") // 手动设置主机名 .useDefaultResponseMessages(false) .select() .apis(RequestHandlerSelectors.basePackage("com.demo.controller")) // 替换为实际的包路径 .paths(PathSelectors.any()) .build(); } ``` 上述代码通过`.host()`方法手动设置了主机名,从而解决了基础URL无法推断的问题[^1]。 #### 方法二:在启动类中添加注解 确保启动类上添加了`@EnableSwagger2`注解,并扫描相关的配置文件夹。例如: ```java @SpringBootApplication @MapperScan("com.demo.system.mapper") @ComponentScan(value = "com.demo.config") @EnableSwagger2 public class HospitalApplication { public static void main(String[] args) { SpringApplication.run(HospitalApplication.class, args); } } ``` 此方法确保了Swagger的相关功能被正确启用,并能够扫描到配置文件中的资源[^2]。 #### 方法三:配置静态资源映射 如果Swagger的静态资源(如`swagger-ui.html`)无法正确加载,可以手动配置静态资源映射。在Spring的配置文件中添加以下内容: ```xml <mvc:resources mapping="/webjars/**" location="classpath*:/META-INF/resources/webjars/" /> <mvc:resources mapping="swagger-ui.html" location="classpath*:/META-INF/resources/" /> ``` 上述配置确保了Swagger的UI界面和相关资源能够正常加载[^3]。 #### 方法四:检查应用部署环境 如果应用部署在API网关或反向代理之后,需要确保网关或代理正确传递了请求头信息(如`X-Forwarded-Host`、`X-Forwarded-Proto`等)。例如,在Nginx中配置如下: ```nginx location /api/ { proxy_pass http://localhost:8080/; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; } ``` 这样可以确保Swagger能够正确解析基础URL[^4]。 ### 注意事项 - 确保Swagger的版本与Spring Boot/SpringMVC的版本兼容。 - 如果使用Spring Boot 3.x,请将`@EnableSwagger2`替换为`@EnableOpenApi`,并引入`springdoc-openapi`依赖。 ### 示例代码 以下是一个完整的Swagger配置类示例: ```java @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .host("example.org") // 手动设置主机名 .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.demo.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API文档") .description("SpringMVC与Swagger2集成示例") .version("1.0.0") .build(); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值