REST确保JSON验证,无需JSON方案即可进行响应

时间:2018-07-23 20:29:37

标签: java json rest rest-assured

我想检查JSON响应至少是否有效,并且找不到使用REST保证的正确方法。

我在REST Assured examples中读到了很多关于matchesJsonSchemaInClasspath的内容,但是我还不想编写整个JSON模式。

get("/products").
    then().
    assertThat().
    body(matchesJsonSchemaInClasspath("products-schema.json"));

无需添加即可通过通过来检查格式错误的JSON的任何检查-因此,即使JSON无效,我也可以检查字段值,例如数组大小。

import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.get;
import static org.hamcrest.core.Is.is;


public class RestEndpointTest{
    @Test
    public void basic_rest_check() {
        get("/my_endpoint").
            then().
            assertThat().
            body("size()", is(2)).
            statusCode(200);
    }
}

并且测试通过了,甚至得到了响应:

[{},{}]MALFORMED

1 个答案:

答案 0 :(得分:0)

现在这是微不足道的,但是我发现在卡住几天后才问了我的问题。因此,解决方案是使用matchesJsonSchema代替matchesJsonSchemaInClasspath

import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.get;
import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchema;

public class RestEndpointTest{
    @Test
    public void basic_rest_check() {
        get("/my_endpoint").
            then().
            assertThat().
            body(matchesJsonSchema("{}")).
            statusCode(200);
    }
}

说明:关于http://json-schema.org/

  

最基本的架构是一个空白的JSON对象,它会限制   什么也没有,什么也不允许,什么也没有描述:

     

{}

还有一个选项可以创建内容为{}的文件并由matchesJsonSchemaInClasspath加载