Wiremock未能匹配请求

问题描述

我正在尝试声明在OAuth2流中正在调用的先前已存根的端点:

        stubFor(
        post(urlPathEqualTo("/token"))
            .withHeader(AUTHORIZATION,equalTo("Basic cgluLmFwaS5jbGllbnRJZDpwaW4uYXBpLmNsaWVudFNlY3JldA=="))
            .withHeader(CONTENT_TYPE,equalTo("application/x-www-form-urlencoded;charset=UTF-8"))
            .withHeader(ACCEPT,equalTo(APPLICATION_JSON_VALUE + "," + APPLICATION_FORM_URLENCODED_VALUE))
            .willReturn(aResponse()
                .withStatus(HttpStatus.OK.value())
                .withHeader(CONTENT_TYPE,"application/json")
                .withHeader(CONNECTION,"Close")
                .withBody("{\n" +
                    "  \"access_token\": \"62466f2c-ff9e-4c6c-a866-b8296cf78041\",\n" +
                    "  \"scope\": \"trust read write\",\n" +
                    "  \"token_type\": \"bearer\",\n" +
                    "  \"expires_in\": 20300,\n" +
                    "}")));

verify(postRequestedFor(urlPathEqualTo("/token")));

有一段日志,存根/实际请求看起来相等,但是wiremockHeader does not match

enter image description here

请问有人在这里有什么问题吗?预先谢谢你!

解决方法

对我来说,这似乎是一个逗号后有空格的问题,请尝试:

.withHeader(ACCEPT,equalTo(APPLICATION_JSON_VALUE + "," + APPLICATION_FORM_URLENCODED_VALUE))

顺便说一下,将标头与equalTo进行比较可能很容易。您可以考虑使用containing

post(urlPathEqualTo("/token"))
    .withHeader(ACCEPT,containing(APPLICATION_JSON_VALUE))
    .withHeader(ACCEPT,containing(APPLICATION_FORM_URLENCODED_VALUE))