REST Assured 65 - How To Parse A JSON Object Response To A Java Map In Rest Assured?

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

猜你喜欢

转载自blog.csdn.net/wumingxiaoyao/article/details/120604375