当前位置: 首页 > 知识库问答 >
问题:

Rest保证:为什么我得到IllegalStateExctive异常?

严令秋
2023-03-14

我正在学习“放心框架”。

我使用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);

我得到以下字符串:

{“国家”:“美国”、“州”:“正义与发展党”、“城市”:“阿达克”}

as响应字符串值。

当我尝试时:

 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;

}

我突然想到:

JAVAlang.IllegalStateException:无法分析对象,因为响应中未指定支持的内容类型。内容类型为“文本/html”;字符集=UTF-8'。

为什么会这样?会不会是其他人返回的是Html而不是Json?我该如何处理这个问题?

谢谢!

共有1个答案

葛泳
2023-03-14

首先,请记住,REST Assured是一个主要用于测试HTTP API的HTTP客户机。所以,让我强调一下,除了测试之外,你不应该使用REST Assured。

看起来您试图使用的endpoint在响应负载中返回了一个JSON文档,但是内容类型头的值是text/html;charset=UTF-8,因此请放心,我们无法将响应解析为JSON文档,并将其转换为ZipData的实例。这并不是你对一个健全的HTTP API的期望。

您可以绕过它,编写一个过滤器来覆盖内容类型标题,如下所示:

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);
 类似资料:
  • 我编写了这段代码,将整个以10为基数的数字转换成二进制。我相信代码就是它所需要的一切,但我无法让工作。 我在这个网站和其他网站上花了几个小时,尝试了无数次的修改,但都没有用。 我已经让代码无错误地编译,但一旦我运行它并输入程序就会崩溃。 下面是代码: 这些是java在我输入数字时抛出的异常。 我希望这是足够的信息。

  • 问题内容: public class Category { 在正在生成。 问题答案: 当您执行时,您称呼孩子们的。这里没有问题,只不过您在这里调用了父对象。这将称呼孩子,等等。 不错的无限循环。 摆脱它的最好方法是将您的方法更改为: 这样,您将不打印parentCategory,而仅显示其名称,不显示无限循环,不显示StackOverflowError。 编辑: 正如博洛在下面说的那样,您将需要检

  • 请问为什么第13行的错误是未报告的异常,必须捕获pr声明要抛出

  • 问题内容: 我刚刚尝试了Jasper Report,我正在关注此站点的教程 我也下载了示例源,然后运行它,没有错误。但是,当我使用创建自己的报告时,请对其进行编译,然后将文件添加到我的项目中。还有,当我运行我的程序: 这是我用于显示报告的按钮操作(这只是示例,报告仅包含一个带有参数的文本:outputText): 如果有问题,我已经将所有需要的jar导入到我的项目中,当我使用该教程中的文件时没有问

  • 问题内容: 我已经在“ userInfo”类中实现了Serializable。我仍然感到异常。这是输出控制台- 这是我的两节课: 问题答案: 为什么我实现了’Serializable’却得到NotSerializableException异常 你还没有 java.io.NotSerializableException:chatservernazmus.User公共类userInfo实现了Seria

  • 我是新手,但我正在编写一个应用程序,我不断收到这个错误,导致应用程序在启动时崩溃。 导致它的代码在下面的类中,在问题的行旁边会有一个这里的注释。 这就是我调用方法的代码。 这是堆栈跟踪。 谢谢你的帮助。