REST Assured 24 - 用List创建JSON Array Request Body

REST Assured 系列汇总 之 REST Assured 24 - 用List创建JSON Array Request Body

前一篇我们了解了用Map创建JSON Object
一个API也可能接收JSON Array payload。例如:处理批量订单,如下

[
    {
        "firstname": "Kelly",
        "additionalneeds": "Breakfast",
        "bookingdates": {
            "checkin": "2021-08-01",
            "checkout": "2021-08-02"
        },
        "totalprice": 222,
        "depositpaid": true,
        "lastname": "Mahajan"
    },
    {
        "firstname": "Kevin",
        "additionalneeds": "Breakfast",
        "bookingdates": {
            "checkin": "2021-07-01",
            "checkout": "2021-07-01"
        },
        "totalprice": 111,
        "depositpaid": true,
        "lastname": "Prashant"
    }
]

一次调用Restful Booking API处理多个订单。我们添加多个包含客户信息JSON Object到一个JSON Array。

那我们怎么创建这样的payload呢?

我们已经知道用Map创建一个JSON Object。一个JSON Array也可以用List或Set来创建,所以我们按如下的步骤:

  1. 创建一个JSON Object添加第一个客户的信息
  2. 创建另外一个JSON Object添加第三个客户的信息
  3. 创建一个List或Set对象,添加上面两个JSON Object到List
// JSON Object for first guest
Map<String,Object> bookingOne = new HashMap<String,Object>();
bookingOne.put("firstname", "Kelly");
bookingOne.put("lastname", "Xia");
bookingOne.put("totalprice", 222);
bookingOne.put("depositpaid", true);
		
Map<String,String> bookingDatesMapForAmod = new HashMap<>();
bookingDatesMapForAmod.put("checkin", "2021-08-01");
bookingDatesMapForAmod.put("checkout", "2021-08-02");
		
bookingOne.put("bookingdates", bookingDatesMapForAmod);
bookingOne.put("additionalneeds", "Breakfast");
		
// JSON Object for second guest
Map<String,Object> bookingTwo = new HashMap<String,Object>();
bookingTwo.put("firstname", "Kevin");
bookingTwo.put("lastname", "Zhang");
bookingTwo.put("totalprice", 111);
bookingTwo.put("depositpaid", true);
		
Map<String,String> bookingDatesMapForAnimesh = new HashMap<>();
bookingDatesMapForAnimesh.put("checkin", "2021-07-01");
bookingDatesMapForAnimesh.put("checkout", "2021-07-01");
		
bookingTwo.put("bookingdates", bookingDatesMapForAnimesh);
bookingTwo.put("additionalneeds", "Breakfast");
		
// Creating JSON array to add both JSON objects
List<Map<String,Object>> jsonArrayPayload = new ArrayList<>();
		
jsonArrayPayload.add(bookingOne);
jsonArrayPayload.add(bookingTwo);

因为Booking API 不接收JSON Array payload,但作为一个例子,请忽略这个。

完整代码:

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CreatingNestedJsonArray {

    @Test
    public void CreatingNestedJsonObjectTest()
    {

        // JSON Object for first guest
        Map<String,Object> bookingOne = new HashMap<String,Object>();
        bookingOne.put("firstname", "Kelly");
        bookingOne.put("lastname", "Xia");
        bookingOne.put("totalprice", 222);
        bookingOne.put("depositpaid", true);

        Map<String,String> bookingDatesMapForAmod = new HashMap();
        bookingDatesMapForAmod.put("checkin", "2021-08-01");
        bookingDatesMapForAmod.put("checkout", "2021-08-02");

        bookingOne.put("bookingdates", bookingDatesMapForAmod);
        bookingOne.put("additionalneeds", "Breakfast");

        // JSON Object for second guest
        Map<String,Object> bookingTwo = new HashMap<String,Object>();
        bookingTwo.put("firstname", "Kevin");
        bookingTwo.put("lastname", "Zhang");
        bookingTwo.put("totalprice", 111);
        bookingTwo.put("depositpaid", true);

        Map<String,String> bookingDatesMapForAnimesh = new HashMap();
        bookingDatesMapForAnimesh.put("checkin", "2021-07-01");
        bookingDatesMapForAnimesh.put("checkout", "2021-07-01");

        bookingTwo.put("bookingdates", bookingDatesMapForAnimesh);
        bookingTwo.put("additionalneeds", "Breakfast");

        // Creating JSON array to add both JSON objects
        List<Map<String,Object>> jsonArrayPayload = new ArrayList();

        jsonArrayPayload.add(bookingOne);
        jsonArrayPayload.add(bookingTwo);


        //GIVEN
        RestAssured
                .given()
                    .baseUri("https://restful-booker.herokuapp.com/booking")
                    .contentType(ContentType.JSON)
                    .body(jsonArrayPayload)
                    .log()
                    .all()
                // WHEN
                .when()
                    .post()
                // THEN
                .then()
                    .assertThat()
                    // Asserting status code as 500 as it does not accept json array payload
                    .statusCode(500)
                    .log()
                    .all();
    }
}

输出:

Request method:	POST
Request URI:	https://restful-booker.herokuapp.com/booking
Proxy:			<none>
Request params:	<none>
Query params:	<none>
Form params:	<none>
Path params:	<none>
Headers:		Accept=*/*
				Content-Type=application/json
Cookies:		<none>
Multiparts:		<none>
Body:
[
    {
        "firstname": "Kelly",
        "additionalneeds": "Breakfast",
        "bookingdates": {
            "checkin": "2021-08-01",
            "checkout": "2021-08-02"
        },
        "totalprice": 222,
        "depositpaid": true,
        "lastname": "Xia"
    },
    {
        "firstname": "Kevin",
        "additionalneeds": "Breakfast",
        "bookingdates": {
            "checkin": "2021-07-01",
            "checkout": "2021-07-01"
        },
        "totalprice": 111,
        "depositpaid": true,
        "lastname": "Zhang"
    }
]
HTTP/1.1 500 Internal Server Error
Server: Cowboy
Connection: keep-alive
X-Powered-By: Express
Content-Type: text/plain; charset=utf-8
Content-Length: 21
Etag: W/"15-/6VXivhc2MKdLfIkLcUE47K6aH0"
Date: Sat, 28 Aug 2021 03:33:22 GMT
Via: 1.1 vegur

Internal Server Error

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值