请放心:为什么会出现 IllegalStateException 异常?
Rest Assured: Why do I get IllegalStateException exception?
我正在研究Rest-Assured框架
我正在使用 http://ziptasticapi.com 免费 API 进行训练。
当我打电话时:
final static String BASE_URI = "http://ziptasticapi.com/";
final static String ADAK_ZIP_CODE = "99546"; //{"country":"US","state":"AK","city":"ADAK"}
final static String ATKA_ZIP_CODE = "99547";
public static final String GET_METHOD = "GET";
RestAssured.baseURI = BASE_URI;
String responseString = when().get(ADAK_ZIP_CODE).then()
.statusCode(200)
.and()
.extract()
.asString();
System.out.println(responseString);
我得到以下字符串:
{"country":"US","state":"AK","city":"ADAK"}
作为 responseString 值。
当我尝试时:
RestAssured.baseURI = BASE_URI;
ZipData zipdata = when().get(ADAK_ZIP_CODE).then()
.statusCode(200)
.and()
.extract()
.as(ZipData.class);
public class ZipData {
public String country;
public String state;
public String city;
}
我崩溃于 :
java.lang.IllegalStateException: Cannot parse object because no
supported Content-Type was specified in response. Content-Type was
'text/html;charset=UTF-8'.
这是为什么?会不会是其余 returns 和 Html 而不是 Json?我该如何处理?
谢谢!
首先,请记住 REST Assured 是一个 HTTP 客户端,主要用于测试 HTTP APIs。因此,让我强调一下,您不应该将 REST Assured 用于测试以外的任何用途。
您尝试使用的端点似乎在响应负载中返回 JSON 文档,但 Content-Type
header 的值为 text/html;charset=UTF-8
,因此 REST Assured 无法将响应解析为 JSON 文档并将其转换为 ZipData
的实例。这不是您对健全 HTTP API.
的期望
您可以解决它并编写一个 filter 来覆盖 Content-Type
header,如下所示:
public class OverrideContentTypeFilter implements Filter {
@Override
public Response filter(FilterableRequestSpecification requestSpec,
FilterableResponseSpecification responseSpec,
FilterContext ctx) {
Response next = ctx.next(requestSpec, responseSpec);
return new ResponseBuilder().clone(next).setContentType(ContentType.JSON).build();
}
}
然后使用如下:
ZipData zipdata =
given()
.filter(new OverrideContentTypeFilter())
.when()
.get(uri)
.then()
.statusCode(200)
.extract()
.as(ZipData.class);
我正在研究Rest-Assured框架
我正在使用 http://ziptasticapi.com 免费 API 进行训练。
当我打电话时:
final static String BASE_URI = "http://ziptasticapi.com/";
final static String ADAK_ZIP_CODE = "99546"; //{"country":"US","state":"AK","city":"ADAK"}
final static String ATKA_ZIP_CODE = "99547";
public static final String GET_METHOD = "GET";
RestAssured.baseURI = BASE_URI;
String responseString = when().get(ADAK_ZIP_CODE).then()
.statusCode(200)
.and()
.extract()
.asString();
System.out.println(responseString);
我得到以下字符串:
{"country":"US","state":"AK","city":"ADAK"}
作为 responseString 值。
当我尝试时:
RestAssured.baseURI = BASE_URI;
ZipData zipdata = when().get(ADAK_ZIP_CODE).then()
.statusCode(200)
.and()
.extract()
.as(ZipData.class);
public class ZipData {
public String country;
public String state;
public String city;
}
我崩溃于 :
java.lang.IllegalStateException: Cannot parse object because no supported Content-Type was specified in response. Content-Type was 'text/html;charset=UTF-8'.
这是为什么?会不会是其余 returns 和 Html 而不是 Json?我该如何处理?
谢谢!
首先,请记住 REST Assured 是一个 HTTP 客户端,主要用于测试 HTTP APIs。因此,让我强调一下,您不应该将 REST Assured 用于测试以外的任何用途。
您尝试使用的端点似乎在响应负载中返回 JSON 文档,但 Content-Type
header 的值为 text/html;charset=UTF-8
,因此 REST Assured 无法将响应解析为 JSON 文档并将其转换为 ZipData
的实例。这不是您对健全 HTTP API.
您可以解决它并编写一个 filter 来覆盖 Content-Type
header,如下所示:
public class OverrideContentTypeFilter implements Filter {
@Override
public Response filter(FilterableRequestSpecification requestSpec,
FilterableResponseSpecification responseSpec,
FilterContext ctx) {
Response next = ctx.next(requestSpec, responseSpec);
return new ResponseBuilder().clone(next).setContentType(ContentType.JSON).build();
}
}
然后使用如下:
ZipData zipdata =
given()
.filter(new OverrideContentTypeFilter())
.when()
.get(uri)
.then()
.statusCode(200)
.extract()
.as(ZipData.class);