【问题标题】:Internal Server Error when making POST request using Rest Assured使用 Rest Assured 发出 POST 请求时出现内部服务器错误
【发布时间】:2020-05-15 06:49:52
【问题描述】:

我尝试使用 POJO 发出 POST 请求,但收到“vHTTP/1.1 500 Internal Server Error”,您能否告知原因? 当我将 body 作为字符串传递时,它可以正常工作,但是传递 bookingDetails 会引发错误。我认为 BookingDates 类有些问题,但我不确定为什么。

package bookings.POST;

import bookings.BookingBaseTest;
import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.junit.jupiter.api.Test;


public class CreateBooking extends BookingBaseTest {
    @Test
    public void createBooking(){
        //Set json Data
        BookingDetails bookingDetails = new BookingDetails();
        bookingDetails.setFirstname("Jim");
        bookingDetails.setLastname("Brown");
        bookingDetails.setTotalprice(111);
        bookingDetails.setDepositpaid(true);

        BookingDetails.BookingDates bDates = new BookingDetails.BookingDates();
        bDates.setCheckin("2018-01-01");
        bDates.setCheckout("2019-01-01");

        bookingDetails.setBookingDates(bDates);
        bookingDetails.setAdditionalneeds("Breakfast");


       Response response = RestAssured.given().
                                            spec(requestSpec)
                                            .body(bookingDetails)
                                        .when()
                                            .post();
        response.then().log().all();


    }


}
package bookings.POST;
/*
{
    "firstname" : "Jim",
    "lastname" : "Brown",
    "totalprice" : 111,
    "depositpaid" : true,
    "bookingdates" : {
        "checkin" : "2018-01-01",
        "checkout" : "2019-01-01"
    },
    "additionalneeds" : "Breakfast"
}
*/

public class BookingDetails {
    private String firstname;
    private String lastname;
    private int totalprice;
    private boolean depositpaid;
    private BookingDates bookingDates;
    private String additionalneeds;

    //Omit other getters and setters


    public BookingDates getBookingDates() {
        return bookingDates;
    }

    public void setBookingDates(BookingDates bookingDates) {
        this.bookingDates = bookingDates;
    }


   static class BookingDates {
        private String checkin;
        private String checkout;

        public String getCheckin() {
            return checkin;
        }

        public void setCheckin(String checkin) {
            this.checkin = checkin;
        }

        public String getCheckout() {
            return checkout;
        }

        public void setCheckout(String checkout) {
            this.checkout = checkout;
        }

    }
}

【问题讨论】:

  • 嗨,我发现我错了。这里是“私人 BookingDates bookingDates;”它应该是预订日期。

标签: java rest-assured web-api-testing


【解决方案1】:

您应该在请求正文中传递 BookingDetails 对象的 json 序列化正文。您可以使用 ObjectMapper 来序列化对象:

//serialize the bookingDetails object 
ObjectMapper mapper = new ObjectMapper();
String bookingDetailsJson = mapper.writeValueAsString(bookingDetails);

然后在您的请求正文中传递它,同时将 contentType 提到为 JSON:

Response response = RestAssured.given().spec(requestSpec).contentType(JSON).body(bookingDetailsJson).when().post();

【讨论】:

  • 感谢您的回答!正如我在上面评论的那样,它可以通过提供正确的名称使其运行,但您的解决方案对我也很有用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多