REST Assured 系列汇总 之 REST Assured 65 - How To Parse A JSON Object Response To A Java Map In Rest Assured?
介绍
不是每次都需要将 response 转换成一个 POJO 类的实例来获取值。我也可以将一个 JSON Object 响应直接转换成一个 Java Map,这样就不创建 POJO 类了。
前提条件
添加 rest assured 依赖库
<!-- REST Assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.4.0</version>
</dependency>
解析 Json Object Response 成 Java Map
一旦响应被返回,如果是一个 JSON Object,那么就可以将它解析成一个 Map。一个 as() 方法,接受一个 TypeRef 引用来支持泛型。例如:一个 JSON Object 可以被表示成一个 Map<String, Object>。 为了强制转换 JSON Object response,需要用到 as() 方法和 TypeRef。TypeRef 是一个抽象类,用于当反序列化一个 response时,具体化类型。
import java.util.Map;
import io.restassured.RestAssured;
import io.restassured.common.mapper.TypeRef;
import io.restassured.http.ContentType;
public class ParseJsonObjectResponseToMap {
public static void main(String[] args) {
Map<String,Object> responseBody = null;
responseBody =
RestAssured
.given()
.baseUri("https://restful-booker.herokuapp.com/")
.basePath("booking")
.contentType(ContentType.JSON)
.body("{\r\n" +
" \"firstname\" : \"Jim\",\r\n" +
" \"lastname\" : \"Brown\",\r\n" +
" \"totalprice\" : 111,\r\n" +
" \"depositpaid\" : true,\r\n" +
" \"bookingdates\" : {\r\n" +
" \"checkin\" : \"2018-01-01\",\r\n" +
" \"checkout\" : \"2019-01-01\"\r\n" +
" },\r\n" +
" \"additionalneeds\" : \"Breakfast\"\r\n" +
"}")
.when()
.post()
.then()
.extract()
.body()
// Extract response as Map<String,Object>
.as(new TypeRef<Map<String,Object>>() {
});
// To print booking id
System.out.println("Booking id is : "+responseBody.get("bookingid"));
// If we do not use below annotation then also no problem. As we are directly casting without checking
// so I have used it to surpass warning.
@SuppressWarnings("unchecked")
// Since "booking" key holds another JSON Object to parsing it again as Map.
Map<String,Object> bookingDetails = (Map<String,Object>)responseBody.get("booking");
System.out.println("First name is "+ bookingDetails.get("firstname"));
}
}
输出:
Booking id is : 11
First name is Jim