在使用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 e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:

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

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

@RestControllerAdvice(basePackages = "com.hy.brush.lesson.admin.controller")

可以通过访问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": "http://www.apache.org/licenses/LICENSE-2.0"
        },
        "version": "1.0"
    },
    "servers": [
        {
            "url": "http://localhost:8080",
            "description": "Inferred Url"
        }
    ],
    "tags": [...]
    ...
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐