当前位置: 首页 > 知识库问答 >
问题:

如何在Spring集成网关中获取自定义标头值?

万乐逸
2023-03-14

这是我的第一个问题。

我的Web应用程序正在使用Spring集成来获取第三方API响应。

响应具有以“X-”开头的自定义标头值。X值是两个。(X-AccessToken-Quota-Allotted,X-AccessToken-Quota-Flow)

因此,我在config xml的header-mapper中添加了inboundHeaderNames,如下所示。

    <int-http:outbound-gateway id="dms.put.outbound.gateway.cert"
        header-mapper="dmsHeaderMapper"
       ...
</int-http:outbound-gateway>

<bean id="dmsHeaderMapper" class="org.springframework.integration.http.support.DefaultHttpHeaderMapper" factory-method="outboundMapper" >
    <property name="outboundHeaderNames" value="X-Request-Id...blabla"/>
    <property name="inboundHeaderNames" value="X-AccessToken-Quota-Allotted, X-AccessToken-Quota-Current"/>
    <property name="userDefinedHeaderPrefix" value=""/>
</bean>

以下是回应。我可以看到X-AccessToken-Quota-alloted

[integration]generic message[payload = { " Type ":" common response "," serverName ":" usl xacd 20022 use1c . intranet . local "," errorMessage":null},headers = { error channel = org . spring framework . messaging . core . genericmessaging template $ temporaryreply channel @ 41208186,X-Request-Id = 0 ce 88 CD 6-d04 b-47dc-b3db-2224656 Fe 9090,uri = https://API-APIcharset=UTF-8,timestamp=1592791409206}]

几乎每个字段值都映射到了responseDto的字段,但我不知道如何将X自定义标题值映射到ResponseTo字段。

以下是当前设置。

<int:gateway id="dmsHttpPUTGateway" service-interface="blabla.gateway.DmsHttpPUTGateway" 
        default-request-channel="dms.put.ch.request.header.router"><int:method name="call" /></int:gateway>

<int:header-value-router input-channel="dms.put.ch.reply.header.router" header-name="jsonObjectName">
    <int:mapping value="DmsCommonResponseDto" channel="dms.put.ch.reply.transformer.DmsCommonResponseDto"/>
</int:header-value-router>

<int:channel id="dms.put.ch.reply.transformer.DmsCommonResponseDto"></int:channel>

<int:json-to-object-transformer input-channel="dms.put.ch.reply.transformer.DmsCommonResponseDto" output-channel="dms.put.ch.reply" type="blabla.DmsCommonResponseDto"></int:json-to-object-transformer>

    DmsCommonResponseDto.java 
private static final long serialVersionUID = 1L;

private String serverName;
private DmsErrorMessageDto errorMessage;
private Date responseDate;

...setter, getter method.

任何哪怕是一点点的线索也会有帮助。提前谢谢你。

共有1个答案

麹浩瀚
2023-03-14

听起来您需要一个 json 转换器下游的自定义转换器。

class MyTransformer extends AbstractTransformer {

    protected abstract Object doTransform(Message<?> message) {
        DmsCommonResponseDto dto = (DmsCommonResponseDto) message.getPayload();
        dto.setRequestId(message.getHeaders.get("X-request-id"));
        ...
        return dto.
    }    

}
 类似资料:
  • 我正在尝试使用< code >传递一些自定义的HTTP头 我试过两种配置。第一个具有“< code > mapped-request-headers ”属性: 第二个具有“”属性,具有相对配置: 但在这两种情况下,远程应用程序加载的消息头如下: 没有我试图添加到请求消息中的“test”头的跟踪。 向 中? 事实上,标题似乎在GenericMessage中“消失”了: 我不明白为什么HTTP请求中会

  • 我正在使用php集成的payumoney支付网关。现在我已经差不多做了,但只想在成功或失败后的响应自定义参数,当我从payumoney网站的付款过程返回。 因此,如果有人对此有想法,那么它将非常感谢。

  • 但是,我还需要定义一个故障转移队列,如果由于某种原因无法访问主队列,将尝试发送到故障转移/辅助队列。 我没有找到任何这种类型的配置的例子。 由于我的通道连接到JMS队列,所以我首先想到的是创建另一个连接工厂(指向辅助JMS服务器),创建另一个队列bean和通道,然后创建另一个网关,如果第一个网关调用引发异常,将使用该网关。 另外,我在尝试定义辅助连接工厂时遇到了一个问题。我不确定如何告诉队列bea

  • 我正在尝试从Laravel中的请求访问自定义标头。标题名为“从访问_”。列出Laravel中的所有标题,只会给出“标准标题”,但我设置的标题不在列表中。在“浏览器网络”选项卡中,我可以看到标头已发送。所以我想知道如何从Laravel内部访问它。 我使用Angular2使用默认的超文本传输协议服务发出请求。

  • 这是我的AngularJS代码(如果我删除header选项,它可以正常工作)。 请求如下: 答复: 我添加了和头,但请求仍然失败 大写字母(我的意思是vs)是否会导致失败?如果是,我如何才能让AngularJS停止这样做? Go服务器路由代码:

  • 在我的项目中使用Spring与RabbitMQ的集成,我面临一个问题。该项目包括从队列接收消息、跟踪传入消息、使用服务激活器处理消息,以及跟踪服务激活器引发的响应或异常。以下是示例配置: 为了符合我的解释,我简化了代码。这个想法是跟踪进出服务激活器的输入和输出/错误消息。为了做到这一点,我使用了一个名为traeId的消息头。这个标识符用作相关性标识符,以便能够将请求消息与其响应相关联(这两个消息共