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

如何获取对象列表与RestAsared而不是对象数组?

翁阳曜
2023-03-14

我有一个带有 RestAssured 的测试自动化宠物项目,我想让它在架构上开发,以便使代码可重用,测试脚本易于阅读。我有表示API的请求和响应的类,我也有DTO类。例如,下面是一个与终结点一起使用的类:

public class BreedsEndpoint extends EndpointTechnicalSteps{

    public BreedsEndpoint(){
        super();
    }

    public BreedsEndpoint search(RequestSpecification spec, String nameOfBreed) {
         Response response = given().spec(spec)
                      .param("q", nameOfBreed)
                      .when()
                      .get("breeds/search/")
                      .thenReturn();
         this.response = response;
         return this;
    }
}

如您所见,有一个父类< code > EndpointTechnicalSteps ,我想用它来处理来自endpoint的响应。例如,我想在< code > endpoint technical steps 中创建一个方法,该方法将从响应中返回一个对象列表,这里有一个问题。RestAssured的最新版本仅支持这样的决定

Object[] objectArray = response.getBody().as(Object[].class);

我必须将对象[].class作为参数传递。

这是Endpoint TechnicalSteps类的代码

public class EndpointTechnicalSteps {

    protected Response response;

    public <T> T getBodyAsList(Class<T> aClass) {
        return response.getBody().as(aClass);
    }
}

例如,如果我使用Breed[]. class参数调用getBodyAsList方法,那么我得到数组Breed[]breeds

如何在EndpointTechnicalSteps中生成将返回的方法


共有2个答案

程沛
2023-03-14

我找到的最好的版本如下。列表的泛型类型会自动从返回类型推断出来。

private static List<LedgerAccountDto> getAllLedgerAccount() {
    return given()
            .when().get("/wallet/ledger_accounts/")
            .then()
            .statusCode(200)
            .extract().as(new TypeRef<>() {});
}

在InteliJ或SonarLint中没有错误或警告,所以这似乎是最好的解决方案

它也很适合模板方法

private static <T> List<T> getAllLedgerAccount() {
    return given()
            .when().get("/wallet/ledger_accounts/")
            .then()
            .statusCode(200)
            .extract().as(new TypeRef<>() {});
}

用这种方式

   List<LedgerAccountDto> fetchedAccounts = getAllLedgerAccount();

这次也没有警告或错误,因为泛型类型是由java自动计算的。

王岳
2023-03-14

kmcakmak指出了解决方案。这里有一个代码:

public <T> List<T> getBodyAsListOf(Class<T> aClass) {
    JsonPath jsonPath = response.getBody().jsonPath();
    return jsonPath.getList("", aClass);
}
 类似资料:
  • 我有一个sql select查询,它只从数据库中检索单个列(组)(即),我在对象数组列表中接收上面列表的结果 , 理想情况下,结果应该包含一个对象数组列表,但是当我检查时,结果的第0个索引包含String object而不是object数组。 但是,如果我使用多个列(假设在查询的select子句中有2个列),我可以看到结果的第0个索引作为对象数组,即 即使查询的select子句中只提到一列,如何获

  • 我有一个方法,它应该从JSON返回不同的对象,这取决于参数中的类类型。我试着根据参数返回一个对象列表,但是我只把LinkedHashMap放入ArrayList。 我搜索了很多,但是在解决方案中,类类型的所有地方都是硬编码的。 有没有一种不用硬代码就能解决这个问题的方法? 我只想传递类类型并通过一个方法获取对象。 当我的对象有关系时,我得到这个例外 无法识别的字段"字段"(类model.orm.部

  • 问题内容: 只是试图在视图中显示我通过ajax从控制器获取的数组,但它显示的是[object Object],[object Object]而不是array。请在下面检查我的js文件: 问题答案: 使用转换到。 试试这个: 我认为,这对您有帮助-

  • 问题内容: 我想做的是从而不是从Volley库中使用一些数据。 以下是用于从服务器中获取JSON对象的代码。 我试图改变到后改为。但这并没有解决。 问题答案: 中的url 不是可选的,并且JSONObject参数用于将带有请求的参数发布到url。 从文档中:http : //afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest

  • 问题内容: 简短的问题: 如果我有可以继承FactoryBean接口的类,那么如何从FactoryBean对象本身而不是FactoryBean.getObject()获得数据? 长问题: 我必须使用基于第三方Spring的库,而该库几乎不使用FactoryBean接口。现在,我总是必须配置2个bean: 实际上,名称为“ XYZ”(与“ XYZ2”比较)的bean的定义永远不会更改,但是由于工厂性