gpt4 book ai didi

java - 在 Spring Integration 中将 HTTP 请求 header 设置为 LinkedList

转载 作者:行者123 更新时间:2023-12-01 12:26:00 27 4
gpt4 key购买 nike

我们正在尝试将 HTTP 入站请求的请求参数设置为 header 。我们已经成功地将请求值设置到 header ,但是它没有按照我们想要的方式设置。

请求 header 映射值设置为 java.util.LinkedList 形式的消息 header ,而不是预期的请求参数类型 String。

以下是配置

<int-http:inbound-gateway id="inboundApplicationDataRequestGateway"
supported-methods="GET"
request-channel="applicationDataRequest"
reply-channel="applicationDataResponse"
mapped-response-headers="HTTP_REQUEST_HEADERS"
path="/services/application/that/data"
reply-timeout="50000">

<int-http:header name="dataVersion" expression="#requestParams['data_version']"/>
</int-http:inbound-gateway>

<int:service-activator id="applicationDataServiceActivator"
input-channel="applicationDataRequest"
output-channel="applicationDataResponse"
ref="dataService"
method="getData"
requires-reply="false"
send-timeout="60000"/>

以下是示例服务方法

public void getData(Message<?> inMessage){
MessageHeaders headers = inMessage.getHeaders();
logger.info("DATA VERSION : " + (String)headers.get("dataVersion"));
}

以下是堆栈跟踪

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.messaging.MessageHandlingException: java.lang.ClassCastException: java.util.LinkedList cannot be cast to java.lang.String
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)

我们如何将 dataVersion 设置为字符串而不是链接列表?

此外,我们还需要对其他 http 入站网关方法中的 POST 请求执行以下操作

感谢任何帮助。

问候,米琳达D

最佳答案

那是因为servletRequest.getParameterMap()返回Map<String, String[]> Spring Integration 将其转换为 MultiValueMap<String, String> 。当你要求它 get它真正返回的一些值 LinkedList<String>

因此,要从中仅获取单个值 List (这里你确实确定只有一项)你应该使用这个:

<int-http:header name="dataVersion" expression="#requestParams.getFirst('data_version')"/>

关于java - 在 Spring Integration 中将 HTTP 请求 header 设置为 LinkedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com