java.lang.NumberFormatException: для входной строки: "443,80" - PullRequest
0 голосов
/ 27 сентября 2018

Я получаю следующее исключение при загрузке моего загрузочного приложения Backend Spring, которое развернуто в контейнере Kubernetes:

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

Когда мы пытаемся использовать бэкэнд-сервисы из API Swagger, я получаю исключение ниже.

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 или незащищенными вызовами внутри служб контейнера.

1 Ответ

0 голосов
/ 27 сентября 2018

Это должно было быть исправлено в Springfox 2.7.0, как можно увидеть в этой проблеме GitHub и примечаниях к выпуску этой версии.

До Springfox2.7.0, следующий код использовался для определения номера порта в 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 (или выше)должен сделать трюк.

...