2017-05-24 122 views
2

我碰到这个问题,偶然阅读我的春天启动应用程序了的日志在调试模式后。弹簧请求映射和URL映射有什么区别?

在启动时,在我的控制器中定义的,而弹簧RequestMappingHandlerMapping是“寻找应用程序上下文请求映射”,并发现了resquest映射。后来BeanNameUrlHandlerMapping是“寻找在应用程序上下文的URL映射”,并未能找到一个在我的情况下(没有URL路径标识)

我的问题是,定义每个bean什么的请求映射和URL映射之间的区别,有人可以链接一个文档来阅读什么BeanNameUrlHandlerMapping正在寻找?

回答

1

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映射到豆,以斜线( “/”)开头的名称,

并作为AbstractDetectingUrlHandlerMapping是:

通过在应用程序上下文中的所有定义豆内省检测装置,用于处理程序豆URL映射。

0

RequestMappingHandlerMapping定义,你可以在应用过程中所有可能的URL。没有必要从控制器注释中读取URL。可以计算映射。例如。当从方法名称生成请求映射时,the question提供了一个解决方案。

RequestMapping应COMLEX用例如@PathParameter映射文本为"\user\{userId}"

因此,第1步注册所有可以处理的URL。

然后为每个URL我们需要找到它实际上应该被调用以处理某些URL豆(以找到春天应该调用的方法)。