构建嵌套的JSONObject

时间:2018-02-23 15:07:59

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

以下是我正在使用的代码

    JSONObject requestParams = new JSONObject();

    requestParams.put("something", "something value");
    requestParams.put("another.child", "child value");

这就是API需要发布的方式

{
   "something":"something value",
   "another": {
   "child": "child value"
   }
}

我收到错误声明"另一个。字段是必需的。"

如何通过restAssured发布此信息?其他API不需要使用嵌套工作进行发布,因此我假设它失败的原因。

2 个答案:

答案 0 :(得分:2)

您可以创建一个请求对象,然后让RestAssured库将对象序列化为json。

例如:

        class Request {
            private String something;
            private Another another;

            public Request(final String something, final Another another) {
                this.something = something;
                this.another = another;
            }

            public String getSomething() {
                return something;
            }

            public Another getAnother() {
                return another;
            }
        }

       class Another {
            private String child;

            public Another(final String child) {
                this.child = child;
            }

            public String getChild() {
                return child;
            }
        }

..然后在测试方法

@Test
public void itWorks() {
...
        Request request = new Request("something value", new Another("child value"));

        given().
                contentType("application/json").
                body(request).
        when().
                post("/message");
...
}

请不要忘记行contentType("application/json"),以便库知道您要使用json。

请参阅:itsme86

答案 1 :(得分:0)

您发布的内容是因为JSONObject没有点分隔关键路径的概念。

{
   "something":"something value",
   "another.child": "child value"
}

您需要制作另一个JSONObject

JSONObject childJSON = new JSONObject():
childJSON.put("child", "child value");
requestParams.put("another", childJSON);