【问题标题】:How to set the response content type in REST Assured?如何在 REST Assured 中设置响应内容类型?
【发布时间】:2017-11-03 07:12:43
【问题描述】:

在我们的项目中,我们面临响应内容类型为application/json; charset="utf-8" 的问题。在解析响应对象时,我们收到以下错误。

我们如何解决这个问题?

我想我们可以通过将响应内容类型设置为“application/json”来解决这个问题。但我不知道该怎么做。我尝试了以下方法,但效果很好。请建议。

RestAssured.responseContentType(ContentType.JSON); ( I think it is a depricated method)

RestAssured.responseSpecification.response().contentType(ContentType.JSON);

我们在验证响应时遇到的错误是: java.io.UnsupportedEncodingException:“utf-8”在 java.lang.StringCoding.decode(StringCoding.java:190) 在 java.lang.String.(String.java:426) 在 java.lang.String.(String.java:491) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77) 在 org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:194) 在 com.jayway.restassured.internal.RestAssuredResponseOptionsGroovyImpl.charsetToString(RestAssuredResponseOptionsGroovyImpl.groovy:482) 在 com.jayway.restassured.internal.RestAssuredResponseOptionsGroovyImpl$charsetToString$3.callCurrent(未知 来源)在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) 在 com.jayway.restassured.internal.RestAssuredResponseOptionsGroovyImpl.asString(RestAssuredResponseOptionsGroovyImpl.groovy:169) 在 com.jayway.restassured.internal.RestAssuredResponseOptionsGroovyImpl.asString(RestAssuredResponseOptionsGroovyImpl.groovy:165) 在 com.jayway.restassured.internal.RestAssuredResponseOptionsImpl.asString(RestAssuredResponseOptionsImpl.java:193)

下面的代码会抛出这个错误

resp.then().body(path, is(value));

“utf-8”的存在可能会导致该问题。我不确定。所以我想将响应的内容类型设置为只有“application/json”而不是application/json; charset="utf-8"

【问题讨论】:

  • 您能否尝试使用 RestAssured.responseSpecification.contentType(ContentType.JSON),因为 responseContentType 方法已被弃用
  • 我也已经尝试过这个选项,但没有运气。它抛出相同的错误。我猜这里的问题是,请求内容类型是application/json; charset=ISO-8859-1 其中响应内容类型为 application/json;字符集="utf-8"。因此调用响应对象的任何方法都会引发错误,如 java.io.UnsupportedEncodingException: "utf-8"。请指导我如何解决?
  • 这是我的代码 --- RestAssured.baseURI="Some uri"; String uri = "某个端点 uri"; RestAssured.port=某个端口; RestAssured.responseSpecification.contentType(ContentType.JSON); String expect=given().header("key","value").expect().body("status.code",equalTo("API-200")).get(uri2).asString();

标签: rest-assured


【解决方案1】:

您可以在 response() 上使用 contentType() 设置响应内容,例如

Response res =  given().response().contentType("Your content type");

【讨论】:

  • 试过下面的 given().response().contentType("application/json;charset=utf-8");但它没有用。响应内容类型字符集具有 "utf-8" 而不是 utf-8 。所以解析响应内容会抛出错误 java.io.UnsupportedEncodingException: "utf-8"
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 2015-03-10
  • 2010-12-12
  • 2016-12-05
相关资源
最近更新 更多