#spring-boot #spring-integration #spring-integration-dsl #spring-integration-http
Вопрос:
Извините, что я не понял проблему.
Проблема в заголовке ETag.
Это ответ заголовка, когда я делаю запрос curl на сервер.
Content-Length: 228
Content-Type: application/json
X-ORACLE-DMS-ECID: 644f1021-bee9-4a11-b8ab-ab8557a746c0-00000f2c
ETag: 1
X-ORACLE-DMS-RID: 0
Это StackTrace:
java.lang.IllegalArgumentException: Invalid ETag: does not start with W/ or "
at org.springframework.util.Assert.isTrue(Assert.java:121) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.http.HttpHeaders.setETag(HttpHeaders.java:1039) ~[spring-web-5.3.9.jar:5.3.9]
at org.springframework.integration.http.support.DefaultHttpHeaderMapper.setETag(DefaultHttpHeaderMapper.java:588) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.integration.http.support.DefaultHttpHeaderMapper.setHttpHeader(DefaultHttpHeaderMapper.java:406) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.integration.http.support.DefaultHttpHeaderMapper.fromHeaders(DefaultHttpHeaderMapper.java:377) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.integration.http.support.DefaultHttpHeaderMapper.fromHeaders(DefaultHttpHeaderMapper.java:75) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.setupResponseAndConvertReply(HttpRequestHandlingEndpointSupport.java:427) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:114) ~[spring-integration-http-5.5.2.jar:5.5.2]
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:52) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.9.jar:5.3.9]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.9.jar:5.3.9]
Это мой пример кода, в котором служба активируется при отправке сообщения на канал «запрос.ввод», если удаленный сервер отвечает с тегом заголовка ETag: 1 возникает исключение.
@Value("${auth.token}")
private String authToken;
@Value("${auth.key}")
private String authKey;
@Value("${url}")
private String url;
@Bean
public IntegrationFlow outRequest() {
return IntegrationFlows.from(Http.inboundGateway("/request")
.requestMapping(m-> m.methods(HttpMethod.POST))
.requestPayloadType(RequestPayloadDTO.class).errorChannel("errorChannel"))
.transform(requestTransformer)
.gateway("request.input")
.get();
}
@Bean
public IntegrationFlow request() {
return flow -> flow.enrichHeaders((headerEnricherSpec -> {
headerEnricherSpec.header(authKey,authToken,true);
})).handle(Http.outboundGateway(url)
.mappedRequestHeaders(authKey)
.httpMethod(HttpMethod.POST)
.expectedResponseType(ResponseDTO.class)
).transform(responseTransformer);
}
@MessagingGateway(defaultRequestChannel = "request.input")
public interface RequestGateway {
ResponseDTO exchange(String out);
}
Комментарии:
1. Покажите, пожалуйста, трассировку стека, которая происходит в этом случае. Что это за ошибка, отправленная на это
errorChannel
?2. Привет @ArtemBilan Я отредактировал вопрос, я не понял проблему.
Ответ №1:
Я решил, добавив
.transform(responseTransformer).headerFilter("ETag");
Спасибо.