Я использую интерфейс HTTP Spring для выполнения HTTP -запросов через RestClient . Первоначально я создал restClient экземпляр без настройки requestFactory , как показано ниже:
org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [no body]
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:112)
at org.springframework.web.client.StatusHandler.lambda$defaultHandler$3(StatusHandler.java:86)
at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:826)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.lambda$readBody$4(DefaultRestClient.java:815)
at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:215)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:814)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.lambda$toEntityInternal$2(DefaultRestClient.java:770)
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:574)
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchange(DefaultRestClient.java:535)
at org.springframework.web.client.RestClient$RequestHeadersSpec.exchange(RestClient.java:677)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.executeAndExtract(DefaultRestClient.java:809)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.toEntityInternal(DefaultRestClient.java:769)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.toEntity(DefaultRestClient.java:765)
at org.springframework.web.client.support.RestClientAdapter.exchangeForEntity(RestClientAdapter.java:85)
at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.lambda$create$3(HttpServiceMethod.java:418)
at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.execute(HttpServiceMethod.java:382)
at org.springframework.web.service.invoker.HttpServiceMethod.invoke(HttpServiceMethod.java:133)
at org.springframework.web.service.invoker.HttpServiceProxyFactory$HttpServiceMethodInterceptor.invoke(HttpServiceProxyFactory.java:243)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)
at jdk.proxy2/jdk.proxy2.$Proxy184.getDeviceCredentialsDetails(Unknown Source)
at ir.co.isc.hamoon.papyrus.controller.IssuerPdfController.uploadOriginalPdf(IssuerPdfController.java:51)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
...
at ir.co.isc.hamoon.common.core.logging.SystemLogger.logMethodExecution(SystemLogger.java:42)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
...
После отладки я заметил, что основной ClientRequestFactory является httpcomponentsclienthttprequestfactory :
Я использую интерфейс HTTP Spring для выполнения HTTP -запросов через RestClient . Первоначально я создал restClient экземпляр [b] без настройки requestFactory [/b], как показано ниже: [code]@Bean("rest-client-builder") public RestClient.Builder globalRestClientBuilder() { return RestClient.builder(); }
@Bean(name = "deviceCredentialsRestClient") DeviceCredentialsRestInterface provideDeviceCredentialsRestClient( @Qualifier("device-rest-client") RestClient restClient ) { RestClientAdapter adapter = RestClientAdapter.create(restClient); HttpServiceProxyFactory factory = HttpServiceProxyFactory.builderFor(adapter).build(); return factory.createClient(DeviceCredentialsRestInterface.class); } [/code] С помощью этой конфигурации, когда я делаю запрос, я получаю 404 [без корпуса] Ошибка со следующим исключением: [code]org.springframework.web.client.HttpClientErrorException$NotFound: 404 : [no body] at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:112) at org.springframework.web.client.StatusHandler.lambda$defaultHandler$3(StatusHandler.java:86) at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:826) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.lambda$readBody$4(DefaultRestClient.java:815) at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:215) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:814) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.lambda$toEntityInternal$2(DefaultRestClient.java:770) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:574) at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchange(DefaultRestClient.java:535) at org.springframework.web.client.RestClient$RequestHeadersSpec.exchange(RestClient.java:677) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.executeAndExtract(DefaultRestClient.java:809) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.toEntityInternal(DefaultRestClient.java:769) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.toEntity(DefaultRestClient.java:765) at org.springframework.web.client.support.RestClientAdapter.exchangeForEntity(RestClientAdapter.java:85) at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.lambda$create$3(HttpServiceMethod.java:418) at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.execute(HttpServiceMethod.java:382) at org.springframework.web.service.invoker.HttpServiceMethod.invoke(HttpServiceMethod.java:133) at org.springframework.web.service.invoker.HttpServiceProxyFactory$HttpServiceMethodInterceptor.invoke(HttpServiceProxyFactory.java:243) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) at jdk.proxy2/jdk.proxy2.$Proxy184.getDeviceCredentialsDetails(Unknown Source) at ir.co.isc.hamoon.papyrus.controller.IssuerPdfController.uploadOriginalPdf(IssuerPdfController.java:51) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... at ir.co.isc.hamoon.common.core.logging.SystemLogger.logMethodExecution(SystemLogger.java:42) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... [/code] После отладки я заметил, что основной ClientRequestFactory является httpcomponentsclienthttprequestfactory :
Я столкнулся со странной проблемой, которой не могу найти объяснения. Это происходит, когда настроенный RestClient обнаруживает какой-либо ошибочный код состояния HTTP, например, 401 Неавторизованный.
В настоящее время я работаю с новым RestClient в Spring Boot 3.2/Spring Framework 5.1 и столкнулся с проблемой обработки ошибок 404. Моя цель — корректно обрабатывать эти ошибки, не вызывая сбоя последующих шагов моего кода, особенно при...
с RestTemplate я использую MockRestServiceServer для модульного тестирования моего кода. Есть ли аналогичный Mock-сервер для RestClient? Есть ли примеры, на которые вы можете дать ссылку или поделиться?