Rest API测试org.springframework.http.converter.HttpMessageNotReadableException

时间:2019-03-15 17:39:16

标签: java automated-tests rest-assured

我正在尝试测试两个Rest API端点,一个是get,另一个是post。这个想法是,由get响应返回的响应主体应为发布的主体。

我正在使用的代码:

RestAssured.baseURI = ROOT_URI;
RequestSpecification httpRequest = 
RestAssured.given().header("Authorization", "Basic " + encodedString);
String endPoint="/v1/getworkers";
Response response = httpRequest.request(Method.GET, endPoint);
String responseBody = response.getBody().asString();

现在我得到的响应主体是:

{"workerDetails":
    [
    {"workerId":"TEST123456",
    "securityId":"TESTWORKERID",
    "workerStatus":"Active",
    "firstName":"Test",
    "lastName":"Userone"}
    ]
}

现在,我执行发布请求,并将String responseBody作为正文:

RestAssured.baseURI = ROOT_URI;
String endpoint="/v1/PostWorkers";
RequestSpecification httpRequest = 
RestAssured.given().header("Authorization", "Basic " + encodedString)
            .header("Content-Type", "application/json").body(postbody);
Response response = httpRequest.request(Method.POST,endpoint);
String responseBody = response.getBody().asString();

我收到错误400:

  

时间戳”:1552670194453,“状态”:400,“错误”:“错误”   请求”,“异常”:“ org.springframework.http.converter.HttpMessageNotReadableException”,“消息”:“ JSON”   解析错误:无法反序列化java.util.ArrayList实例   START_OBJECT令牌;嵌套异常为   com.fasterxml.jackson.databind.JsonMappingException:无法   从START_OBJECT中反序列化java.util.ArrayList的实例   令牌\ n,位于[来源:java.io.PushbackInputStream@56bba771

该怎么办?

1 个答案:

答案 0 :(得分:1)

根据错误日志的问题是:

  

JSON分析错误:无法从START_OBJECT令牌中反序列化java.util.ArrayList实例

这意味着API期望将ArrayList作为输入,但是却获得了Object作为输入。换句话说,期望输入ArrayList<WorkerDetail>,但是您传递的是 对象WorkerDetails,其中包含类型为workerDetails的字段ArrayList<WorkerDetail>

请尝试修改以下位置的get请求的响应:

String responseBody = response.getBody().asString();

收件人:

List responseBody = response.jsonPath().getList("workerDetails");

然后根据responseBody请求将此body()传递给POST方法。