在没有HTTP请求/ servlet的情况下使用@RequestMapping功能(Java方法映射的URL)

前端之家收集整理的这篇文章主要介绍了在没有HTTP请求/ servlet的情况下使用@RequestMapping功能(Java方法映射的URL)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试构建一个简单的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开始.

最佳答案
你所寻找的并不完全清楚;您已经说过通过确定控制器中的交换/路由密钥来路由到后端应用程序.

如果您的意思是每个后端服务需要处理多种请求类型并需要进一步路由,那么,是的,路由器可能是最好的解决方案.

问题是如何将信息(路由)传递到后端 – 可能是在消息属性/标题中.

你是正确的,SI只在HTTP端点内部使用请求映射,但没有什么能阻止你编写使用相同注释的基于注释的路由器.

猜你在找的Spring相关文章