使用RestAssured的JSON POST

use*_*080 5 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\"}"));
  }
Run Code Online (Sandbox Code Playgroud)

但是似乎正在得到这个例外

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

我不确定是什么问题?

par*_*dak 7

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\"}"));
}
Run Code Online (Sandbox Code Playgroud)

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

...
.body("resultMessage",equalTo("Message accepted"));
Run Code Online (Sandbox Code Playgroud)


Bat*_*ana 1

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

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