【问题标题】:What is the difference between a spring request mapping and url mapping?spring 请求映射和 url 映射有什么区别?
【发布时间】:2017-10-24 19:23:33
【问题描述】:

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

在启动时,虽然 spring RequestMappingHandlerMapping 是“在应用程序上下文中查找请求映射”并找到在我的控制器上定义的请求映射。后来BeanNameUrlHandlerMapping 是“在应用程序上下文中查找 URL 映射”并且无法为我的上下文中定义的每个 bean 找到一个(未识别 URL 路径)

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

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案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 映射到名称以斜杠(“/”)开头的 bean,

    作为AbstractDetectingUrlHandlerMapping 是:

    通过自省应用程序上下文中所有已定义的 bean 来检测处理程序 bean 的 URL 映射。

    【讨论】:

      【解决方案2】:

      RequestMappingHandlerMapping 定义了您可以在应用程序中处理的所有可能的 URL。无需从控制器注释中读取 URL。可以计算映射。例如。 the question 在从方法名称动态生成请求映射时提供了一种解决方案。

      RequestMapping 应该是复杂的,例如@PathParameter 当映射文本为"\user\{userId}"

      所以第 1 步注册了我们可以处理的所有 URL。

      然后对于每个 URL,我们需要找到一个实际应该被调用来处理一些 URL 的 bean(以找到一个 spring 应该调用的方法)。

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 2011-04-22
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        • 2023-03-09
        • 2018-11-12
        • 2019-11-25
        • 2019-11-13
        相关资源
        最近更新 更多