2016-03-08 2 views
1

Возможно ли использовать springboot/spring-mvc или Jersey для добавления контроллера (& методов) в runtime?Spring run runtime добавить контроллер?

Значение при запуске, пользователь может ввести имя контроллера (например, user), и имя метода sayHello, и представить, и /user/sayHello/ включена без перезапуска сервера пружины?

(Что касается , что ответа, что выходит за рамки, просто предположит, ответ «OK»)

Если пружина не может достичь его, что JVM остальных рамок поддерживает такую ​​функциональность?

похоже майка может Programmatically build API Resource, но как насчет время выполнения?

+0

Невозможно изменить среду выполнения ResourceConfig. Я видел вопросы с попытками полностью _reload_ a_new_ ResourceConfig во время выполнения, но 1) я не видел разрешения, 2) Я не знаю, хочет ли это того, чего вы хотите. –

+0

Что вы подразумеваете под _ "/ user/sayHello/is enabled_"? В первом абзаце вы написали _ «добавить контроллер (& методы) во время выполнения« _ », что является чем-то другим. – zeroflagL

+0

В терминах JAX-RS/пользователь является ресурсом и/sayHello - это путь. То же самое, просто разные термины. Я хочу сказать, как добиться того, чтобы «среда выполнения добавила такую ​​вещь», так что '/ user/sayHello' не будет выводить 404 Not Found или другие серверные исключения. – smallufo

ответ

2

Вы можете достичь этого результата, используя шаблоны URI в вашем сопоставлении запросов. Предполагая, что количество вариаций конечно, и вы можете абстрагировать ваши сопоставления запросов до наименьшей требуемой суммы.

@RequestMapping(value="/{var1}/{var2}", method=RequestMethod.GET) 
public HttpStatus handleRequest(@PathVariable String var1, @PathVariable String var2) { 
    callSomeService(var1, var2); 
    return HttpStatus.OK; 
} 

В приведенном выше примере будет поймать ваш «/ пользователь/SayHello» запрос, или любой другой запрос, содержащий 2 части на пути. Если у вас есть более сложные варианты, вы можете соответствующим образом создать сопоставления запросов.

1

Невозможно зарегистрировать новый маршрут в диспетчерском сервлете после загрузки контекста приложения.

Вы можете создать метод controlelr «поймать» множество запросов с групповым символом

@RequestMapping(value="/custom/**", method=RequestMethod.GET) 
public T handle() {...} 

, а затем направить запрос вручную в теле метода.

Смежные вопросы