使用RestAssured进行JSON POST

8

我正在尝试创建一个测试来验证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请求中,你只能发送表单参数或内容主体,而不能同时发送两者!

我不确定问题出在哪里?


3
请不要改变您的问题意图,因为这会使答案无效。如果您在实施答案时遇到困难,请在其下发表评论,答复者将收到通知。如果您最终有另一个问题,则将其发布为__新问题__。您可以链接回这里以提供背景信息。 - Mogsdad
2个回答

13
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\"}"));
}

此外,我没有在问题中找到REST服务的输出。例如,它返回一个JSON {"resultMessage":"Message accepted"},您应该按以下方式验证响应:
...
.body("resultMessage",equalTo("Message accepted"));

谢谢,但我仍然遇到相同的错误 groovy.json.JsonException: Lexing failed on line: 1, column: 1, while reading 'R', no possible valid JSON value or punctuation could be recognized. 我会创建一个新问题,因为我的原始问题已经被编辑过了。 - user3520080

1
尝试将mimeType更改为标头而不是参数。
根据您分享的信息,我认为您需要的是Content-Type标头,而不是mimeType。

这会引发另一个异常 groovy.json.JsonException: 在读取 'R' 时,第1行第1列词法分析失败,无法识别任何可能的有效JSON值或标点符号。 - user3520080
你有以上异常的完整堆栈跟踪打印吗?还是以上是你能看到的唯一消息?似乎是JSON解析错误。 - Bathiya Priyadarshana
请确认一下,您是否仍在使用mimeType头部信息,或者已经按照我的回答更改为Content-Type了? - Bathiya Priyadarshana
是的,它是.header("Content-Type", "application/json"),我会更新问题。 - user3520080
我觉得也许最好单独为这个新异常创建一个问题? - user3520080

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接