在Spring MVC中可以动态设置RequestMappings吗?


问题内容

我已经使用Spring
MVC三个月了。我正在考虑一种动态添加RequestMapping的好方法。这是因为有必要将控制器部件放入库中,然后进行动态添加。无论如何,我能想到的唯一方法就是声明这样的控制器:

@Controller
@RequestMapping("/mypage")
public class MyController {

@RequestMapping(method = RequestMethod.GET)
    public ModelAndView mainHandler(HttpServletRequest req) {
        return handleTheRest(req);
    }

}

这样做不好,因为基本上我没有使用Spring。然后,我将无法使用表单绑定,批注等。我想将动态添加requestMappings到可以通过自动绑定像通常的MVC控制器一样进行注释的类的方法,以便避免手动处理HttpServletRequest。

有任何想法吗?}


问题答案:

Spring
MVC使用HandlerMapping接口的实现来执行URL映射。通常盒子中使用了的那些是默认的实现,即SimpleUrlHandlerMappingBeanNameUrlHandlerMappingDefaultAnnotationHandlerMapping

如果您想实现自己的映射机制,这很容易做到-只需实现该接口(或更可能是extend
AbstractUrlHandlerMapping),在您的上下文中将该类声明为Bean,DispatcherServlet当有请求时将使用该类进行查询。需要映射。

请注意,HandlerMapping在一个上下文中,您可以具有任意多个实现。将依次咨询他们,直到其中之一匹配为止。