春季启动运行时添加控制器?

问题描述:

Springboot/spring-mvc或Jersey是否可以添加控制器(&方法)运行时春季启动运行时添加控制器?

含义上运行时,用户可输入的控制器名称(如user)和方法名sayHello,并提交,和/user/sayHello/而无需重新启动弹簧服务器被使能?

(至于什么反应,那超出了范围,只承担回复“OK”)

如果弹簧不能达到它,这JVM休息框架支持这样的功能?

看来球衣可以Programmatically build API Resource,但运行时怎么样

+0

无法修改运行时ResourceConfig。我在运行时看到了试图完全_reload_一个_new_ ResourceConfig的问题,但是1)我没有看到任何解决方案,2)我不知道这是否是你想要的。 –

+0

你是什么意思_“/ user/sayHello/is enabled_”?在第一段中,您写了_“在运行时添加控制器(&方法)”_,这是不同的。 – zeroflagL

+0

在JAX-RS中,/ user是一个资源,/ sayHello是一个路径。同样的事情,只是不同的条款。我的观点是,如何实现“运行时添加这样的事情”,以便'/ user/sayHello'不会输出404 Not Found或其他服务器异常。 – smallufo

您可以通过在请求映射中使用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() {...} 

,然后手动路由请求的方法体。