2013-03-19 3 views
1

У меня есть рабочий URL, как это: localhost/infoSpring программно зарегистрировать RequestMapping

@Controller 
@RequestMapping("/info") 
public class VersionController { 

    @RequestMapping(value = "", method = RequestMethod.GET) 
    public @ResponseBody 
    Map get() { 
     loadProperties(); 
     Map<String, String> m = new HashMap<String, String>(); 
     m.put("buildTimestamp", properties.getProperty("Application-Build-Timestamp")); 
     m.put("version", properties.getProperty("Application-Version")); 
     return m; 
    } 

} 

и я бы зарегистрировать некоторые другие отображения на инициализации моего приложения, как это:

localhost/xxxx/info 
localhost/yyyy/info 
localhost/zzzz/info 

Всех эти адреса будут возвращайте такой же ответ, как localhost/info

xxxx, yyyy часть приложения изменчива. Я должен зарегистрировать пользовательские сопоставления как

Bu это работает только для просмотра.

Любая идея для динамической регистрации?

+0

Есть причина, вы не можете использовать URL-формы '/ affId/1313/info'? – parsifal

+0

Да, потому что это было полностью вымышленное. Фактически изменяющаяся часть не является частью. :( – Cemo

+2

, описывающее ситуацию, которая не имеет отношения к вашей реальной проблеме, не помогает вам и тратит время на каждого, кто пытается вам помочь. – parsifal

ответ

5

Вы можете зарегистрировать новый HandlerMapping, где вы можете добавить обработчики для ваших URL-путей; наиболее удобной реализацией будет SimpleUrlHandlerMapping.

Если вы хотите, чтобы эти обработчики быть методами боба (как те, с аннотацией @RequestMapping), вы должны определить их как HandlerMethod оберток так, что уже зарегистрировано RequestMappingHandlerAdapter будет ссылаться на них.

+4

Привет, им такая же ситуация ... может дать мне подсказку/наклейку о том, как это сделать? – NeoP5

+4

Как использовать 'SimpleUrlHandlerMapping'? Как определить их как« HandlerMethod' wrappers?Небольшой пример сделает этот ответ намного лучше. –

-2

Это не совсем понятно, что вы пытаетесь достичь, но, возможно, вы можете использовать @PathVariable в вашем @RequestMapping, что-то вроде:

@RequestMapping("/affId/{id}") 
public void myMethod(@PathVariable("id") String id) {} 

Edit: Оригинальный пример изменился он появляется, но вы могли бы иметь возможность использовать PathVariable в любом случае.

0

Вы можете зарегистрировать свой собственный HandlerMapping, расширив RequestMappingHandlerMapping, например. переопределить registerHandlerMethod.

1

Начиная с весны 5.0.M2, Spring предоставляет функциональный веб-фреймворк, который позволяет программно создавать «контроллерные» конструкции.

Что вам нужно сделать в вашем случае - создать правильный RouterFunction для URL-адресов, которые вам нужно обработать, а затем просто обработать запрос с помощью соответствующего HandlerFunction.

Имейте в виду, что эти конструкции не являются частью Spring MVC, а являются частью Spring Reactive.

Заканчивать this блог для более подробной информации

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