【发布时间】:2018-02-27 21:26:42
【问题描述】:
您好,我有一个小问题。我想手动调用弹簧控制器,但我有一个例外。首先,让我向您展示一些集成流程和控制器:
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(
Amqp.inboundAdapter(rabbitMqConfig.connectionFactory(), queue)
.acknowledgeMode(AcknowledgeMode.MANUAL)
.errorChannel("errorChannel")
.concurrentConsumers(2)
.maxConcurrentConsumers(3))
.transform(Transformers.fromJson(Event.class))
.transform(new EventToRequestTransformer())
.handle(Request.class, (request, headers) -> controller.trigger(request))
.<ResponseEntity, HttpStatus>transform(ResponseEntity::getStatusCode)
.routeToRecipients(some routing)
.get();
}
@Controller
public class SomeController {
@RequestMapping(value = "/trigger", method = RequestMethod.POST)
public ResponseEntity<Response> trigger(@RequestBody Request request)
{
//some logic
}
}
当我运行我的应用程序并发送事件时,我在线上遇到异常:
.handle(Request.class, (request, headers) -> controller.trigger(request))
例外:
嵌套异常是 java.lang.IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行
有人能告诉我哪里出了问题以及如何解决吗?我想我可以像调用简单 POJO 一样调用控制器方法。
【问题讨论】:
-
你误用了请求对象吗?
标签: java spring spring-mvc spring-integration spring-integration-dsl