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
相关产品推荐
相关产品推荐

