当 HTTP 响应内容类型不包含 space 时测试 org.apache.http.entity.ContentType

Testing org.apache.http.entity.ContentType when the HTTP response content type doesn't contain a space

我正在为授权服务器编写测试,测试 oauth 响应的内容类型是否为 JSON。授权服务器正在使用 spring-security-oauth2 2.0.1.4.RELEASE 而我的 JUnit 测试正在使用 rest-assured 2.9.0.

@Test
public void testTokenEndpoint() throws Exception {
    // Client Credentials Grant
    ResponseBody clientCredentialsGrantResponseBody =
            given(this.spec)
                .authentication().basic(VALID_CLIENT_ID, VALID_CLIENT_SECRET)
                .queryParameter("grant_type", CLIENT_CREDENTIALS_GRANT)
                .queryParameter("username", VALID_USERNAME)
                .queryParameter("password", VALID_PASSWORD)
                .queryParameter("scope", VALID_SCOPES)
            .when()
                .post(OAUTH_TOKEN_ENDPOINT)
            .then()
                .assertThat().contentType(is(ContentType.APPLICATION_JSON.toString()))
            .extract().response().body();
}

当我运行这个测试时,我遇到了这个失败

java.lang.AssertionError: 1 expectation failed.
Expected content-type is "application/json; charset=UTF-8" doesn't match actual content-type "application/json;charset=UTF-8".

所以org.apache.http.entity.ContentType的值在类型和字符集之间包含一个space,但是授权服务器响应内容类型没有。

现在我可以通过

来解决这个问题
.assertThat().contentType(is(ContentType.APPLICATION_JSON.toString().replace(" ", "")))

但我觉得一定有更好的方法。

是否有我可以使用的没有 space 的内容类型枚举?可以将授权服务器配置为在内容类型中包含 space 吗?

您可以尝试使用 Spring 中的以下 class:org.springframework.http.MediaType

好像没有spacein the implementation.