来自此网址 想提取pdf名称
localhost:port/server/InboundGateway/pdf/
<int-http:inbound-gateway id="InboundGateway"
request-channel="request" reply-channel="response" supported-methods="GET,POST"
request-payload-type="java.lang.String" path="/InboundGateway/{type}"
<int-http:header name="type" expression="#pathVariables.type" />
</int-http:inbound-gateway>
在上面的代码中(int-http:header name =&#34; type&#34;)类型将是pdf 但是如何在java代码中提取它的值我无法获得HttpServletRequest
我在支持方法
的基础上进行路由<int:router input-channel="request" expression="headers.http_requestMethod">
<int:mapping value="POST" channel="contentDownload" />
</int:router>
<int:service-activator input-channel="contentDownload"
method="extract" ref="downloadPayloadExtractor" output-channel="contentRouter"></int:service-activator>
在DownloadPayloadExtractor中的我想得到PathVariable
这些是日志的
SEVERE: Servlet.service() for servlet [InboundGateway] in context with path [/mgl-crm-server] threw exception
org.springframework.integration.MessageHandlingException:java.lang.IllegalArgumentException:必需的标头不可用:type 在org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:76) 在org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:64) 在org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:98) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) 在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:110) 在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) 在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61) 在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157) 在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:128) 在org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288) 在org.springframework.integration.core.MessagingTemplate.send(MessagingTemplate.java:149) 在org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:220) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) 在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:110) 在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) 在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61) 在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157) 在org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288) 在org.springframework.integration.core.MessagingTemplate.doSendAndReceive(MessagingTemplate.java:318) 在org.springframework.integration.core.MessagingTemplate.sendAndReceive(MessagingTemplate.java:239) 在org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:233) 在org.springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessage(MessagingGatewaySupport.java:207) 在org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.doHandleRequest(HttpRequestHandlingEndpointSupport.java:271) 在org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:95) 在org.springframework.web.context.support.HttpRequestHandlerServlet.service(HttpRequestHandlerServlet.java:67) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908) at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) 在java.lang.Thread.run(Thread.java:662) 引起:java.lang.IllegalArgumentException:必需的标头不可用:类型 在org.springframework.util.Assert.isTrue(Assert.java:65) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:58) 在org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:104) 在org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) 在org.springframework.expression.spel.ast.Ternary.getValueInternal(Ternary.java:55) 在org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:60) 在org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) 在org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102) 在org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:102) 在org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:126) 在org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:225) 在org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:125) 在org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:73) ......还有42个
答案 0 :(得分:0)
由于Framewrok与Message<?>
达成交易,您确实可以正确地将PathVariable
填充到MessageHeaders
。
改善代码的唯一一件事就是问题&#34;如何访问type
标题?&#34;。那么,你应该改进POJO方法:
public Object extract(Object payload, @Header("type") String type) {
....
}
这就是全部。
查看Reference Manual中的更多信息。
<强>更新强>
所需的标头不可用:输入
好吧,将其添加到您的配置中:
<wire-tap channel="logging">
<logging-channel-adapter id="logging" log-full-message="true" level="ERROR"/>
在收到请求后直到该异常分享日志。