java控制器_java-调用Spring控制器方法而不需要上网

tldr:有没有办法在不连接互联网的情况下发出内部请求(使用方法的路径)?

我为什么需要它?我有一个接收很多事件的项目.由谁来决定谁将处理每个事件.所以我有类似的东西:

@RestController

@RequestMapping("/events")

public class EventHandlerAPI {

@Autowired

private EventAHandler eventAhandler;

@Autowired

private EventBHandler eventBhandler;

@PostMapping("/a")

public void handleEventA(@RequestBody EventA event) {

eventAhandler.handle(id,event);

}

@PostMapping("/b")

public void handleEventB(@RequestBody EventB event) {

eventBhandler.handle(id,event);

}

}

我们最近增加了对通过队列服务接收事件的支持.它向我们发送有效负载和事件类.我们的决定是让两个接口都正常工作(休息和排队).避免代码重复的解决方案是让Controller选择哪个处理程序来处理事件.如今的代码与此类似:

@Configuration

public class EventHandlerQueueConsumer {

@Autowired

private EventHandlerAPI eventHandlerAPI;

private Map eventHandlers;

@PostConstruct

public void init() {

/* start listen queue */

declareEventHandlers();

}

private void declareEventHandlers() {

eventHandlers = new HashMap<>();

eventHandlers.put(EventAHandler.class,(EventHandler) eventHandlerAPI::handleEventA);

eventHandlers.put(EventBHandler.class,(EventHandler) eventHandlerAPI::handleEventB);

}

private void onEventReceived(AbstractEvent event) {

EventHandler eventHandler = eventHandlers.get(event.getClass());

eventHandler.handle(event);

}

private interface EventHandler {

void handle(T event);

}

}

这段代码有效,但是它不允许控制器选择谁来处理事件(我们的意图).该决定实际上是由地图做出的.

我想做的是通过请求映射调用控制器方法,而无需访问互联网.像这样:

@Configuration

public class EventHandlerQueueConsumer {

// MADE UP CLASS TO SHOW WHAT I WANT

@Autowired

private ControllerInkover controllerInvoker;

@PostConstruct

public void init() { /* start listen queue */ }

private void onEventReceived(AbstractEvent event) {

controllerInvoker.post(event.getPath(),new Object[] { event });

}

}

这种方式更清洁,并且让所有决策由控制器做出.

我研究了很多,却没有找到实现它的方法.在调试Spring时,我发现他是如何在DispatcherServlet之后路由请求的,但是所有spring内部使用HttpServletRequest和HttpServletResponse

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值