java.lang.NumberFormatException:对于输入字符串:“ 443,80”

时间:2018-09-27 11:50:34

标签: spring-boot netflix-zuul netflix-eureka springfox kubernetes-ingress

我遇到了部署在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或容器服务内的不安全调用。

2 个答案:

答案 0 :(得分:1)

Springfox 2.7.0应该已经修复了该问题,如该版本的this GitHub issuerelease 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") 中添加示例属性时它解决了。