我正在尝试构建一个简单的PoC来替换当前依赖于主Java(Spring MVC 4.2)Web应用程序中加载的JAR文件的应用程序,以在启动时声明其他控制器.它看起来非常像:
客户< - HTTP - >网关应用(Spring MVC order.jar)
Exposed endpoints:
/ping via controller in core Spring app
/orderApp/doSomething via controller in order.jar
理想情况下,我希望将每个JAR文件作为独立的Spring Boot应用程序,使用Spring Integration 4.2(通过AMQP)与面向外部世界的HTTP网关交换数据.一点架构:
客户< - HTTP - > Gateway(Spring MVC)< - AMQP - >独立订单应用程序(Spring Boot)
Exposed endpoints:
/ping via controller in core Spring MVC app
/{appName}/** via controller in core Spring MVC app
我在MVC应用程序的控制器中有逻辑,它找到哪个AMQP交换机应该根据appName接收消息,我使用网关序列化HTTP请求,将其发送到正确的应用程序,可以处理它,将答案发回给主应用程序将响应转发给客户端.这里没问题.
但是,我希望尽可能重用我目前在JAR文件中使用的方便的@RequestMapping注释.这些JAR基本上包含额外的控制器,在给定的根下暴露端点.
题
如果URL,请求正文和标题作为输入,如何手动触发@RequestMapping逻辑?例如,假设我有一个类似的实现:
@RequestMapping("projects/{projectId}")
public Project projectById(@PathVariable final String projectId) {
(...)
return project;
}
有没有办法从我的独立应用程序中的某个地方的自定义服务代码中我可以执行一个调用,例如handler.getResponse(“projects / 123abc”,requestBody,requestHeaders),这将自动查找给定输入参数/哪个方法调用网址是什么?
我不想要@RequestMapping的所有功能(当然也不能直接访问HttpServletRequest / HttpServletResponse).我想做的有点像HttpServletRequest的模拟,但没有servlet和一切的所有开销.它应该是“生产”代码,而不是测试中使用的代码.
否则,除了@RequestMapping,我没有反对使用别的东西,前提是我可以在URI和Java方法之间实现相同类型的映射,自动获取从URI中提取的参数.自定义Spring Integration路由器?我知道SI有一些请求映射支持,但仅从我见过的HTTP开始.