spring - 弃用 DefaultAnnotationHandlerMapping 后如何通过 RequestMappingHandlerMapping 访问 getHandlerMap()
问题描述
由于Spring 已弃用DefaultAnnotationHandlerMapping
并已被 替换RequestMappingHandlerMapping
,因此我遇到了以下代码的情况:
@Autowired
private DefaultAnnotationHandlerMapping handlerMapping;
//in an API that lists handler mapping
Map<String, Object> handlerMap = handlerMapping.getHandlerMap();
现在,RequestMappingHandlerMapping
不提供这种方法。我可以使用哪个函数来获取所需的处理程序映射?
回答时要考虑的事项:
我一直在看的东西:
我试图通过
DefaultAnnotationHandlerMapping
&的父类RequestMappingHandlerMapping
。我得出的结论AbstractUrlHandlerMapping
是包含getHandlerMap()
和扩展的函数AbstractHandlerMapping
。RequestMappingHandlerMapping
AbstractHandlerMethodMapping<T>
作为超级父母并扩展,AbstractHandlerMapping
但我找不到类似的东西getHandlerMap()
解决方案
原来,因为AbstractUrlHandlerMapping
是持有函数的类,而 getHandlerMap 通过它的 javadoc
将注册的处理程序作为不可修改的 Map 返回,注册的路径作为键,处理程序对象(或处理程序 bean 名称,在惰性初始化处理程序的情况下)作为值。
AbstractUrlHandlerMapping
由于这是一个内部 Spring 映射,因此可以使用扩展的任何类来检索映射。具体来说,我使用了BeanNameUrlHandlerMapping
.