You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thorntail+Swagger UI生成HTTPS请求致REST方法无法执行,如何强制用HTTP?

解决Thorntail Swagger UI默认生成HTTPS调用的问题

首先明确:没有直接的@Api参数可以单独指定某个接口强制使用HTTP,不过我们可以通过全局配置Swagger/OpenAPI的协议规则,让所有接口的文档生成HTTP调用链接,从而解决你遇到的SSL错误问题。

下面提供两种实用的解决方案:

1. 通过Thorntail配置文件修改(推荐,无需改动代码)

在项目中添加或修改src/main/resources/project-defaults.yml配置文件,指定Swagger的主机地址和默认协议为HTTP:

swagger:
  host: localhost:8080
  schemes:
    - HTTP

启动应用后,Swagger UI生成的curl命令会自动切换为http://localhost:8080前缀,不再默认使用HTTPS。

2. 通过代码注解做全局配置

如果你更倾向于在代码层面固化配置,可以创建一个Swagger全局配置类,用@SwaggerDefinition注解统一指定协议和主机:

import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.SwaggerDefinition.Scheme;

@SwaggerDefinition(
    schemes = {Scheme.HTTP},
    host = "localhost:8080"
)
public class SwaggerGlobalConfig {
    // 无需额外业务代码,仅作为配置载体
}

这个注解会覆盖Swagger的自动推断逻辑,强制所有接口文档使用HTTP协议生成调用链接。

补充:若使用MicroProfile OpenAPI(Thorntail后期版本支持)

如果你的项目采用MicroProfile OpenAPI规范替代原生Swagger,可以用@OpenAPIDefinition注解指定服务器地址和协议:

import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
import org.eclipse.microprofile.openapi.annotations.servers.Server;

@OpenAPIDefinition(
    servers = {
        @Server(url = "http://localhost:8080", description = "本地开发服务器")
    }
)
public class OpenApiGlobalConfig {
}

问题根源说明

Thorntail的Swagger扩展默认会根据容器环境自动推断协议,哪怕容器仅存在默认的SSL占位配置,也可能优先选择HTTPS。通过上述配置可以强制覆盖这个默认行为,明确指定使用HTTP协议。

修改完成后,Swagger UI生成的curl命令会变为:

curl -X GET "http://localhost:8080/time/now" -H "accept: application/json"

执行该命令就不会再出现SSL相关的错误了。

内容的提问来源于stack exchange,提问作者Francesco Marchioni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:57:46