【问题标题】:How to find RestController mapping that matches a URI in spring?如何在 spring 中找到与 URI 匹配的 RestController 映射?
【发布时间】:2022-07-20 19:12:35
【问题描述】:

给定一个输入的 URI 字符串,如何找到与之匹配的 RestController 模板?

例如,给定一个输入 URI - /users/1 它应该匹配到 /users/{id}

【问题讨论】:

    标签: spring-boot kotlin


    【解决方案1】:

    这可以使用RequestMappingHandlerMapping来完成

    获取使用 RestController 配置的所有路径模式的列表 注意:这不会返回尚未使用 RestController 配置的路径:

     private fun getAllPathPatterns(): List<PathPattern> {
         val patterns: MutableList<PathPattern> = mutableListOf()
         requestMappingHandlerMapping.handlerMethods.forEach {
             (mapping, _) ->
             patterns.addAll(mapping.patternsCondition.patterns)
         }
         return patterns
     }
    

    将 URI 映射到使用 RestController 配置的相应路径模式。如果没有这样的路径模式,则该指标将标记为“未知”

     private fun normaliseUri(uri: String): String {
         val uriPath = PathContainer.parsePath(uri)
         val pathPatterns = getAllPathPatterns()
         val matchingPattern = pathPatterns.find { pathPattern -> pathPattern.matches(uriPath) } ?: return "unknown"
         return matchingPattern.patternString
     }
    

    【讨论】:

      猜你喜欢
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多