我有一个端点控制器。我想在运行时禁用此终结点,以便用户看起来应用程序处于脱机状态。
当前正在执行此操作以禁用终结点:
private static final Map<RequestMappingInfo, HandlerMethod> requestMappings = new HashMap<>();
this.context.getHandlerMethods().forEach((k, v) -> {
if (k.getPatternsCondition().getPatterns().contains("/customer")) {
requestMappings.put(k, v);
}
});
requestMappings.forEach((k, v) -> this.context.unregisterMapping(k));
为了实现:
requestMappings.forEach((k, v) -> this.context.registerMapping(k, v.getBean(), v.getMethod()));
requestMappings.clear();
这就像一个符咒,bean在运行时被取消注册和注册。然而,当用户调用我的应用程序时,他们得到的是404,而不是连接超时,这正是我要找的。
我明白为什么我会得到404。请求仍然会进入应用程序,但是找不到路径,因为bean没有注册,所以它返回404。我该如何着手解决一个“实际离线”的情况下,没有返回任何东西。
1条答案
按热度按时间pwuypxnk1#
我真的不明白这种场景的用例是什么。
不过,我可以想到一些方法:
停止应用程序。正如在注解中已经说明的那样-客户端将尝试连接,并且最终将进入连接超时。
“以编程方式”重新启动应用程序上下文,而不重新启动整个jvm。有一个关于这样做的教程。
第二种方法只能与房地产结合使用
spring.main.web-environment=false
在应用程序上下文重新启动期间应该提供的。