我尝试通过Outbound网关将类型为 MultiValueMap 的有效负载发送到spring MVC控制器。但似乎地图数据不会出现在控制器上。不知道什么是错的或遗失的。我的代码是这样的:
出站配置:
<int-http:outbound-gateway id="outGateway"
http-method="POST"
request-channel="responseChannel"
url="http://localhost:8081/SpringIntegration-In-out-test/responseReq"
extract-request-payload="true">
</int-http:outbound-gateway>
控制器配置:
@RequestMapping("/responseReq")
public ModelAndView goResponse(@RequestBody MultiValueMap<String,String> body){
Iterator it = body.entrySet().iterator();
while (it.hasNext()) {
MultiValueMap.Entry pairs = (MultiValueMap.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
it.remove();
}
return new ModelAndView("response");
}
我使用Iterator获取地图值,但它没有任何内容。
答案 0 :(得分:0)
Eveything看起来不错。
我建议您“嗅探”您的HTTP流量,看看您的身体发生了什么。在Windows上,我使用T CP Trace。在这里,您应确保真正发送Map
作为有效负载。
从另一侧分别测试Controller
,例如使用一些RestClient。我的偏好 - Firefox plugin。在此处手动构建表单,该表单应转换为MultiValueMap
中的DispatcherServlet
,并且不要忘记显示标题Content-Type: application/x-www-form-urlencoded
答案 1 :(得分:0)
如果要以单向方式使用出站适配器(仅限发送),则应使用outbound-channel-adapter
:
<int-http:outbound-channel-adapter
id="outAdapter"
channel="responseChannel"
url="http://localhost:8081/SpringIntegration-In-out-test/responseReq"
http-method="POST"
charset="UTF-8"
/>
其次,通过将RequestMethod
定义为POST
:
@RequestMapping(value="/responseReq", method=RequestMethod.POST)
最后,为什么要通过设置extract-request-payload="true"
将Spring Integration消息转换为JMS消息。