SpringBoot使用Swagger3出现Unable to infer base is common when using dynamic servlet

时间:2025-04-03 15:53:27

在使用SpringBoot中配置Swagger3的时候,出现

Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For . if the api is available at /api/v2/api-docs then the base url is /api/. Please enter the location manually:

通过排查发现,出现这个问题原因是项目中通过SpringRestControllerAdvice对接口返回的数据做了全局统一的拦截处理,添加了codedata等信息,当打开swagger地址http://localhost:8080/swagger-ui/的时候,swagger接口中返回的的数据也被做了处理,导致swagger接口返回的数据格式和期望的不一致,所以报错。

可以通过在RestControllerAdvice的注解上制接口的扫描包来修复。

@RestControllerAdvice(basePackages = "")

可以通过访问swagger的接口来看一下返回数据的格式 http://localhost:8080/v3/api-docs

如果是 swagger2 可以通过 http://localhost:8080/v2/api-docs 来查看。

正常的格式应该是这样的

{
    "openapi": "3.0.3",
    "info": {
        "title": "Api Documentation",
        "description": "Api Documentation",
        "termsOfService": "urn:tos",
        "contact": {},
        "license": {
            "name": "Apache 2.0",
            "url": "/licenses/LICENSE-2.0"
        },
        "version": "1.0"
    },
    "servers": [
        {
            "url": "http://localhost:8080",
            "description": "Inferred Url"
        }
    ],
    "tags": [...]
    ...
}