Spring boot java.lang.NumberFormatException:对于输入字符串:";443,80“;
我在点击部署在Kubernetes容器上的后端Spring引导应用程序时遇到以下异常: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
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
的代码为例()。