Spring boot java.lang.NumberFormatException:对于输入字符串:";443,80“;

Spring boot java.lang.NumberFormatException:对于输入字符串:";443,80“;,spring-boot,netflix-zuul,netflix-eureka,springfox,kubernetes-ingress,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.s

我在点击部署在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
我的所有请求都通过ingress/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卸载一样,rest应该是容器服务中的普通http或不安全调用。

这应该在Springfox 2.7.0中得到修复,如本版本的和中所示

spring.application.name=app-gateway
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://app-eureka-dev/eureka
Springfox 2.7.0之前,用于确定主机名提供程序中的端口号:

String port = request.getHeader("X-Forwarded-Port");

if (hasText(port)) {
  builder.port(Integer.parseInt(port));
}
因此,它基本上使用
X-Forwarded-Port
报头来确定端口号。但是,在您的例子中,它似乎同时传递HTTP和HTTPS端口(
443,80
),这显然不是一个有效的整数


将您的
springfox-SWAGGER 2
依赖项升级到2.7.0(或更高版本)应该可以做到这一点。

当我的DTO属性用@APIModelProerty注释时,我在SWAGGER中遇到了同样的问题。主要是,当DTO对象中存在长类型属性且无法将空字符串(“”)值转换为0时,出现了此问题


因此,当我在
@APIModelProperty(example=“1”,required=“false”)
中添加example属性时,问题就解决了。当我通过入口连接时,它通过443传递,卸载ssl,只转发到80,如果我错了,请纠正我。这是因为
X-Forwarded-Port
包含它曾经转发过的每个端口号,因此,如果我正确理解您的体系结构,它将通过443的入口,将其转发到端口80上的Zuul,并添加
X-Forwarded-port:443
。在此之后,Zuul转发到您的目标服务,并将端口80添加到
X-Forwarded-port:443,80
。我知道了,但是是否可以将Zuul的端口限制为仅80,或者将某些配置更改为仅80端口。这样我就可以在future@pappu_kutty您可以创建自己的
ZuulFilter
来修改标题。您基本上可以以实现
X-Forwarded-Port
的代码为例()。