我遇到了部署在Kubernetes容器上的后端Spring引导应用程序时遇到以下异常:
java.lang.NumberFormatException: For input string: "443,80"
我所有的服务都已在eureka注册:
#Eureka
spring.application.name=app-name
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://app-eureka-dev/eureka
eureka.instance.preferIpAddress=true
eureka.instance.non-secure-port-enabled=true
我的所有请求都通过入口/ zuul服务进行路由。
spring.application.name=app-gateway
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://app-eureka-dev/eureka
当我们尝试通过Swagger API访问后端服务时,我遇到了异常。
java.lang.NumberFormatException: For input string: "443,80"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at springfox.documentation.swagger2.web.HostNameProvider.componentsFrom(HostNameProvider.java:72)
at springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(Swagger2Controller.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod
即使遇到异常,我仍通过容器名称连接到eureka服务。是否还有其他需要的配置,因为我们在入口处进行ssl卸载,其余的应该是纯HTTP或容器服务内的不安全调用。
答案 0 :(得分:1)
Springfox 2.7.0应该已经修复了该问题,如该版本的this GitHub issue和release notes所示。
在Springfox 2.7.0之前,the following code用于确定HostNameProvider
中的端口号:
String port = request.getHeader("X-Forwarded-Port");
if (hasText(port)) {
builder.port(Integer.parseInt(port));
}
因此,基本上,它使用X-Forwarded-Port
标头来确定端口号。但是,在您的情况下,似乎它同时传递了HTTP和HTTPS端口(443,80
),这显然不是有效的整数。
将您的springfox-swagger2
依赖性升级到2.7.0(或更高版本)应该可以解决问题。
答案 1 :(得分:0)
当我的 DTO 属性用 @APIModelProerty 注释时,我在 SWAGGER 中遇到了同样的问题。主要是当DTO对象中存在Long类型属性并且无法将空字符串(“”)值转换为0时出现问题。
所以,当我在 @APIModelProperty(example = "1", required = "false")
中添加示例属性时它解决了。