在 Spring MVC 中使用自定义 HandlerMethodMappingNamingStrategy

问题描述 投票:0回答:1

在 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

}
java spring spring-boot spring-mvc
1个回答
0
投票

对于这种情况,您必须使用 @RequestMapping 中的 name

属性

为此映射分配一个名称。在类型级别和方法级别都支持!当在两个级别上使用时,通过使用“#”作为分隔符连接来导出组合名称。

© www.soinside.com 2019 - 2024. All rights reserved.