Spring 6 -PropertyBatchUpdateException – не найдено подходящих редакторов или стратегии преобразования для класса HttpComponentsClientHttpRequestFactory

Я создаю bean-компонент RestTemplate, который внутри использует класс org.springframework.http.client.HttpComponentsClientHttpRequestFactory.

После перехода на Spring 6 при создании bean-компонента класса HttpComponentsClientHttpRequestFactory я получаю ошибку ниже.

Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Failed to convert property value of type 'java.lang.String' to required type 'java.time.Duration' for property 'connectTimeout'; Cannot convert value of type 'java.lang.String' to required type 'java.time.Duration' for property 'connectTimeout': no matching editors or conversion strategy found
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:135)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:79)

файл context.xml

<bean id = "restTemplate" class = "org.springframework.web.client.RestTemplate">
  <constructor-arg>
      <bean class = "org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
          <constructor-arg>
              <bean class = "MyHttpClientFactory">
                  <property name = "keepAliveMS" value = "${keepalive:300000}"/>
              </bean>
          </constructor-arg>
          <property name = "connectTimeout" value = "${connectTimeout:5000}"/>
    </bean>
  </constructor-arg>
</bean>

Любая помощь приветствуется.

Заранее спасибо.

Миграция с какой версии? Кроме того, если вы используете Spring Boot, почему у вас есть конфигурация XML, а не Java? В Spring 6 появился setConnectTimout(Duration), который, как я подозреваю, теперь XML выбирает вместо setConnectTimeout(int).

M. Deinum 13.03.2024 08:49

Я перешел с Spring 5 на Spring 6 и Spring Boot 2 - Springboot 3, используя конфигурацию XML, чтобы добавить другое значение тайм-аута для разных типов вызова отдыха.

Nidhi257 13.03.2024 08:53

Для этого вам не нужна конфигурация XML, вы можете сделать то же самое на Java с гораздо большей легкостью.

M. Deinum 13.03.2024 08:54

ОК, но мне нужно настроить с помощью XML.

Nidhi257 13.03.2024 09:05

Когда вы используете Spring Boot, попробуйте изменить 5000 на 5S и 300000 на 300S или 5M. Я также предполагаю, что вы правильно разрешаете Spring Boot загружать это, а теперь сами взломаете это?

M. Deinum 13.03.2024 09:18

Падение с тем же исключением.

Nidhi257 13.03.2024 13:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обновил свой контекстный файл, как показано ниже:

<bean id = "restTemplate" class = "org.springframework.web.client.RestTemplate">
  <constructor-arg>
      <bean class = "org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
          <constructor-arg>
              <bean class = "MyHttpClientFactory">
                  <property name = "keepAliveMS" value = "${keepalive:300000}"/>
              </bean>
          </constructor-arg>
          <property name = "connectTimeout" >
        <bean class = "java.time.Duration" factory-method = "ofMillis">
            <constructor-arg value = "${connectTimeout:5000}"/>
        </bean>
        </property>
    </bean>
  </constructor-arg>
</bean>

Другие вопросы по теме