春季启动运行时添加控制器?
问题描述:
Springboot/spring-mvc或Jersey是否可以添加控制器(&方法)运行时?春季启动运行时添加控制器?
含义上运行时,用户可输入的控制器名称(如user
)和方法名sayHello
,并提交,和/user/sayHello/
而无需重新启动弹簧服务器被使能?
(至于什么反应,那超出了范围,只承担回复“OK”)
如果弹簧不能达到它,这JVM休息框架支持这样的功能?
看来球衣可以Programmatically build API Resource,但运行时怎么样?
答
您可以通过在请求映射中使用URI模板来实现此结果。假设变体的数量是有限的,并且可以将请求映射抽象为所需的最少量。
@RequestMapping(value="/{var1}/{var2}", method=RequestMethod.GET)
public HttpStatus handleRequest(@PathVariable String var1, @PathVariable String var2) {
callSomeService(var1, var2);
return HttpStatus.OK;
}
上面的例子会捕获你的“/ user/sayHello”请求,或者包含路径中包含2个部分的任何其他请求。如果你有一些更复杂的变化,你可以相应地创建请求映射。
答
在加载应用程序上下文后,在Dispatcher Servlet中注册新路由是不可能的。
您可以创建一个controlelr方法“钓”的各种请求与通配符
@RequestMapping(value="/custom/**", method=RequestMethod.GET)
public T handle() {...}
,然后手动路由请求的方法体。
无法修改运行时ResourceConfig。我在运行时看到了试图完全_reload_一个_new_ ResourceConfig的问题,但是1)我没有看到任何解决方案,2)我不知道这是否是你想要的。 –
你是什么意思_“/ user/sayHello/is enabled_”?在第一段中,您写了_“在运行时添加控制器(&方法)”_,这是不同的。 – zeroflagL
在JAX-RS中,/ user是一个资源,/ sayHello是一个路径。同样的事情,只是不同的条款。我的观点是,如何实现“运行时添加这样的事情”,以便'/ user/sayHello'不会输出404 Not Found或其他服务器异常。 – smallufo