【发布时间】: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