Я дал вам несколько инструкций в комментариях к моему ответу на ваш вопрос: java .lang.IllegalArgumentException: аргумент 'json' должен быть экземпляром: [class java .lang.String, class [B
Мы, вероятно, могли бы рассматривать это как дублирование, но это не повредит мне, если я повторюсь и здесь.
Код состояния HTTP-ответа сохраняется в соответствующем заголовке, когда <int-http:outbound-gateway>
обрабатывает ClientHttpResponse
:
else {
replyBuilder = messageBuilderFactory.withPayload(httpResponse);
}
replyBuilder.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE,
httpResponse.getStatusCode());
return replyBuilder.copyHeaders(headers);
И этот заголовок просто доступен ниже по потоку для вашего рассмотрения.
Если вы действительно хотите, чтобы этот код состояния был представлен в вашем testSubmitPaymentResponseVO
, тогда вам, вероятно, понадобится установить на нем.
Один из способов - реализовать некоторый метод преобразования, чтобы принять ваш testSubmitPaymentResponseVO
и этот заголовок и установить его в свой POJO и вернуть это из этого заголовка:
testSubmitPaymentResponseVO setStatusCode(testSubmitPaymentResponseVO pojo, @Header(name = HttpHeaders.STATUS_CODE) HttpStatus statusCode) {
pojo.setStatusCode(statusCode);
return pojo;
}
Другой способ - использовать компонент <enricher>
:
<int:enricher id="userEnricher"
input-channel="setStatusCodeChannel"
output-channel="MytestReqResponseChannel">
<int:property name="StatusCode" expression="headers[http_statusCode]"/>
</int:enricher>
И ваш <int:json-to-object-transformer>
должен выводить в этот новый setStatusCodeChannel
.
См. Документы: https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#payload -en богаче