如何配置MockServer实现请求头完全精确匹配 无额外或缺失请求头
解决方案
MockServer 没有内置的请求头严格匹配配置项,你可以通过添加自定义请求匹配器实现「请求头集合完全一致才命中」的逻辑,修改后代码如下:
mockServer .`when`( request() .withPath("/somePath") // 先校验指定头存在且值匹配 .withHeaders( Headers( header("header1", "value1"), header("header2", "value2") ).withKeyMatchStyle(KeyMatchStyle.MATCHING_KEY) ) // 新增自定义匹配逻辑,校验无额外请求头 .withRequestMatcher { request: HttpRequest -> // 此处填写所有允许的请求头名称,统一转小写避免大小写匹配问题 val allowedHeaders = setOf("header1", "header2").map { it.lowercase() }.toSet() val actualHeaders = request.headerNames.map { it.lowercase() }.toSet() actualHeaders == allowedHeaders } ) .respond( response() .withContentType(MediaType.APPLICATION_JSON_UTF_8) .withBody("OK") )
注意事项
- 如果你需要忽略HTTP客户端自动携带的标准头(比如
Host、Accept、Connection等),可以把这些头名称加入allowedHeaders集合,或者在actualHeaders中过滤掉这些头再做比对。 - 该方法需要MockServer版本 >= 5.11.0,低版本可以替换为脚本匹配逻辑实现同样效果。
内容的提问来源于stack exchange,提问作者Ultranium
相关产品推荐
相关产品推荐

