在调试模式下阅读弹簧启动应用程序的日志后,我偶然发现了这个问题。
在启动时,Spring RequestMappingHandlerMapping
是"在应用程序上下文中寻找请求映射"并找到我的控制器上定义的resquest映射。稍后BeanNameUrlHandlerMapping
是"在应用程序上下文中寻找URL映射"并且无法为我的上下文中定义的每个bean找到一个(没有标识URL路径)
我的问题是,请求映射和网址映射之间有什么区别,有人可以链接文档来阅读BeanNameUrlHandlerMapping
正在寻找的内容吗?
答案 0 :(得分:2)
<强> RequestMappingHandlerMapping 强>
根据文档,RequestMappingHandlerMapping:
从@Controller类中的类型和方法级@RequestMapping注释创建RequestMappingInfo实例。
可以使用构造函数实例化RequestMappingInfo:
public RequestMappingInfo(String name,
PatternsRequestCondition patterns,
RequestMethodsRequestCondition methods,
ParamsRequestCondition params,
HeadersRequestCondition headers,
ConsumesRequestCondition consumes,
ProducesRequestCondition produces,
RequestCondition<?> custom)
表示具有一组要匹配的条件的请求。
<强> BeanNameUrlHandlerMapping时强>
HandlerMapping接口的实现,该接口从URL映射到名称以斜杠开头的bean(&#34; /&#34;),
和AbstractDetectingUrlHandlerMapping是:
通过内省应用程序上下文中所有已定义的bean来检测处理程序bean的URL映射。
答案 1 :(得分:0)
RequestMappingHandlerMapping定义您可以在应用程序中处理的所有可能的URL。没有必要从控制器注释中读取URL。可以计算映射。例如。 the question在从方法名称生成请求映射时提供了解决方案。
RequestMapping应该与例如映射文本时@PathParameter
是"\user\{userId}"
因此,第1步注册我们可以处理的所有网址。
然后,对于每个URL,我们需要找到一个实际上应该被调用来处理某个URL的bean(以找到spring应该调用的方法)。