使用RestAssured的JSON POST

时间:2016-01-19 16:40:19

标签: java rest-assured

我正在尝试创建一个测试来验证JSON Post的响应是否符合预期。

我正在尝试将一个JSON消息正文的POST测试到一个URL然后发送一条文本消息,如果成功,它会以JSON格式再次发送一个成功的响应。

我的测试如下

public void simpleTest() {

      String myJson = "{\"phoneNumber\":\"353837986524\", \"messageContent\":\"test\"}";
      given()
              .port(31111) // port number
              .header("Content-Type", "application/json")
              .body(myJson)
              .when()
              .post("/testenvironment/text/send")
              .then().assertThat()
              .body("message", equalTo("{\"resultMessage\":\"Message accepted\"}"));
  }

但似乎得到了这个例外

  

java.lang.IllegalStateException:您可以发送表单参数   或者POST中的正文内容,而不是两者!

我不确定问题是什么?

2 个答案:

答案 0 :(得分:5)

Restassured无法根据堆栈跟踪解析Json。我使用org.json jar,这是处理大json输入的更优雅方式。在java中还有其他json处理实现,可以根据您的偏好使用。

来到你的代码:

public void simpleTest() {

   // use org.json JSONObject to define your json
   JSONObject jsonObj = new JSONObject()
                             .put("phoneNumber","353837986524")
                             .put("messageContent","test");

   given()
      .port(31111) // port number
      .contentType("application/json")  //another way to specify content type
      .body(jsonObj.toString())   // use jsonObj toString method
   .when()
      .post("/testenvironment/text/send")
   .then()
      .assertThat()
      .body("message", equalTo("{\"resultMessage\":\"Message accepted\"}"));
}

另外,我没有找到问题中其余服务的输出。例如,它返回一个json {"resultMessage":"Message accepted"},您应该通过以下方式验证响应:

...
.body("resultMessage",equalTo("Message accepted"));

答案 1 :(得分:1)

尝试将mimeType更改为标题而不是参数。

根据您分享的信息,我认为您需要的是Content-Type标头,而不是mimeType。