如何获取邮件头的请求URL

时间:2014-08-04 16:14:12

标签: spring-integration spring-ws

我有一个入站网关来处理JSON有效负载。由于我们使用与SOAP端点相同的后端服务,因此我需要有一个映射到所有路径的入站网关。我可以看到默认的HTTP标题出现在消息中,但我特别需要请求URL,以便我可以解析它并根据需要路由到相应的服务。

我的入站网关:

<int-http:inbound-gateway id="JSONGateway"
        path="*" request-channel="JSONRequestChannel" supported-methods="POST"
        reply-timeout="5000" 
        header-mapper="headerMapper"
        request-payload-type="java.lang.String" >
</int-http:inbound-gateway>

我尝试添加一个像SOAP一样的头文件,但是TransportContextListener是null。

<int:header-enricher input-channelJSONequestChannel"
    output-channel="JSONRequestChannelWithHeaders">

    <int:header name="service"
        expression="T(org.springframework.ws.transport.context.TransportContextHolder).transportContext.connection.uri.toString().substring(T(org.springframework.ws.transport.context.TransportContextHolder).transportContext.connection.uri.toString().lastIndexOf('/')+1)" />
</int:header-enricher>

我需要一种方法来获取请求的URL,以便我可以将服务解析为我的下游路由器的消息头。

/json/ContactService = "ContactService"
/json/ContactService/insert = "ContactService"
/json/ContactService/get/234 = "ContactService"

我还尝试添加一个header-mapper类,但仍遇到同样的问题。如何在代码中获取HTTPServletRequest的句柄?一旦我得到它,我就可以得到我需要的所有标题。

1 个答案:

答案 0 :(得分:0)

好吧,你没有检查邮件标题。

ServletServerHttpRequest转换为Message后,默认情况下会获得这些标头:

Message<?> message = messageBuilder
                    .setHeader(org.springframework.integration.http.HttpHeaders.REQUEST_URL,
                            request.getURI().toString())
                    .setHeader(org.springframework.integration.http.HttpHeaders.REQUEST_METHOD,
                            request.getMethod().toString())
                    .setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL,
                            servletRequest.getUserPrincipal())
                    .build();

所以,http_requestUrl是让你继续并适当地解析它。