出站网关发布请求弹簧MVC控制器

时间:2014-04-18 05:30:52

标签: java spring spring-mvc spring-integration

我尝试通过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获取地图值,但它没有任何内容。

2 个答案:

答案 0 :(得分:0)

Eveything看起来不错。

  1. 我建议您“嗅探”您的HTTP流量,看看您的身体发生了什么。在Windows上,我使用T CP Trace。在这里,您应确保真正发送Map作为有效负载。

  2. 从另一侧分别测试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消息。