我有一个入站网关来处理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的句柄?一旦我得到它,我就可以得到我需要的所有标题。
答案 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
是让你继续并适当地解析它。