spring请求映射和url映射有什么区别?

时间:2017-05-24 12:33:51

标签: spring spring-mvc spring-boot

在调试模式下阅读弹簧启动应用程序的日志后,我偶然发现了这个问题。

在启动时,Spring RequestMappingHandlerMapping是"在应用程序上下文中寻找请求映射"并找到我的控制器上定义的resquest映射。稍后BeanNameUrlHandlerMapping是"在应用程序上下文中寻找URL映射"并且无法为我的上下文中定义的每个bean找到一个(没有标识URL路径)

我的问题是,请求映射和网址映射之间有什么区别,有人可以链接文档来阅读BeanNameUrlHandlerMapping正在寻找的内容吗?

2 个答案:

答案 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时

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应该调用的方法)。