在 Spring MVC 中,每个端点都会通过
HandlerMethodMappingNamingStrategy
自动分配一个名称,默认情况下,这是由 RequestMappingInfoHandlerMethodMappingNamingStrategy
完成的,它将使用控制器的大写字母、井号 (#) 和方法名称终点。
因此,名为
HomeController
且具有方法 index
的控制器将自动分配映射名称 HC#index
。
我想提供我自己的策略,即使用完整的控制器名称,因此它将生成映射名称
HomeController#index
。
Spring MVC 文档非常清楚并说:
这就是它的工作原理。启动时,每个@RequestMapping都会被分配 通过 HandlerMethodMappingNamingStrategy 指定一个默认名称,其 默认实现使用类的大写字母和 方法名称(例如 ThingController 中的 getThing 方法 变为“TC#getThing”)。如果存在名称冲突,您可以使用 @RequestMapping(name="..") 分配显式名称或实现 您自己的 HandlerMethodMappingNamingStrategy。
我创建了自己的类来实现
HandlerMethodMappingNamingStrategy
,但我不知道 Spring MVC 现在如何拾取它。
我在 Spring 代码中看到默认策略引用的唯一地方是在一个抽象类中,它将直接实例化默认策略:
public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMethodMapping<RequestMappingInfo> {
...other code
protected RequestMappingInfoHandlerMapping() {
setHandlerMethodMappingNamingStrategy(new RequestMappingInfoHandlerMethodMappingNamingStrategy());
}
...other code
}
对于这种情况,您必须使用 @RequestMapping 中的 name
属性为此映射分配一个名称。在类型级别和方法级别都支持!当在两个级别上使用时,通过使用“#”作为分隔符连接来导出组合名称。