我们正在尝试将请求参数从HTTP入站请求设置为标头。我们设法成功地将请求值设置为标头,但是没有按照我们想要的方式设置。
请求标头映射值设置为消息头,作为java.util.LinkedList而不是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"));
}
以下是stacktrace
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请求执行以下操作
感谢任何帮助。
此致 MilindaD
答案 0 :(得分:0)
那是因为servletRequest.getParameterMap()
返回Map<String, String[]>
而Spring Integration将其转换为MultiValueMap<String, String>
。当你问get
某个值时,它真的会返回LinkedList<String>
。
所以,要从List
获得单个值(这里你确实只有一个项目),你应该使用它:
<int-http:header name="dataVersion" expression="#requestParams.getFirst('data_version')"/>