Spring以编程方式注册RequestMapping

Cem*_*emo 2 java spring spring-mvc

我有一个工作网址: localhost/info

@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;
   }

}
Run Code Online (Sandbox Code Playgroud)

我会在初始化我的应用程序时注册其他一些映射,如下所示:

localhost/xxxx/info
localhost/yyyy/info
localhost/zzzz/info
Run Code Online (Sandbox Code Playgroud)

所有这些网址都会返回相同的响应 localhost/info

应用程序的xxxx,yyyy部分是可变的.我必须注册自定义映射

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("???").setViewName("???");
}
Run Code Online (Sandbox Code Playgroud)

这只适用于观点.

有动态注册的想法吗?

Cos*_*atu 5

您可以注册一个新的HandlerMapping,您可以在其中添加URL路径的处理程序; 最方便的实现是SimpleUrlHandlerMapping.

如果您希望这些处理程序是bean方法(如那些带注释的那些@RequestMapping),您应该将它们定义为HandlerMethod包装器,以便已经注册的RequestMappingHandlerAdapter将调用它们.

  • 如何使用`SimpleUrlHandlerMapping`?如何将它们定义为`HandlerMethod`包装器?一个小例子可以使这个答案更好. (6认同)