【发布时间】:2022-07-20 19:12:35
【问题描述】:
给定一个输入的 URI 字符串,如何找到与之匹配的 RestController 模板?
例如,给定一个输入 URI - /users/1 它应该匹配到 /users/{id}
【问题讨论】:
标签: spring-boot kotlin
给定一个输入的 URI 字符串,如何找到与之匹配的 RestController 模板?
例如,给定一个输入 URI - /users/1 它应该匹配到 /users/{id}
【问题讨论】:
标签: spring-boot kotlin
这可以使用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
}
【讨论】: