使用JSON模式或等效的方法验证Java POJO?

时间:2018-05-29 12:28:28

标签: java json jsonschema

它有一种方式或技术,如JSON模式,我在其中获得数据结构的JSON描述,我可以在JAVA中验证是否符合描述。 我想要JSON模式之类的东西来验证传入的数据,但是我想要将POJO或Maps验证为Java对象,而不是JSON文档本身。

让POJO成为JSON只是为了验证它不是一个实用的选项,谢谢!

是使用JSON架构或任何其他技术执行此操作的方法吗?

更新:摘要 据我所知:JSON Schema是一个用于验证JSON文档的JSON文档。我想要一个用JSON编写的模式来验证Java POJO。

下面的例子(我使用validate作为类Validator的静态函数):

public static void main(String[] args) {
        String schema = "{\n" +
                "  \"type\": \"object\",\n" +
                "  \"properties\": {\n" +
                "    \"street_address\": { \"type\": \"string\" },\n" +
                "    \"city\":           { \"type\": \"string\" },\n" +
                "    \"state\":          { \"type\": \"string\" }\n" +
                "  },\n" +
                "  \"required\": [\"street_address\", \"city\", \"state\"]\n" +
                "}";
        Object foo = new Hashtable();

        ((Map)foo).put("street_address","first street");
        ((Map)foo).put("street_address","The city");
        ((Map)foo).put("street_address","Not the USA");

        Validator validator = new Validator(schema);

        if (Validator.validate(foo, schema)) {
            System.out.println("It's validated");
        } else
            System.err.println("It isn't validated");
    }

3 个答案:

答案 0 :(得分:0)

您正在寻找OPEN API:https://github.com/OAI/OpenAPI-Specification

这是前SWAGGER TOOL(https://swagger.io),允许在JSON / YAML / XML中定义对象。 这经常用于:

  1. 记录您的API和您可以接收的对象
  2. 根据JSON
  3. 中定义的结构生成客户端存根
  4. 通过在其他工具(例如邮递员)中集成JSON来帮助创建测试套件
  5. 这使您不仅可以记录您的POJO,还可以记录许多其他内容。它非常强大。

答案 1 :(得分:0)

我刚刚参与了这个项目,它完全符合您的要求: https://github.com/everit-org/json-schema

这是架构的一个例子:

{
    "type" : "object",
    "properties" : {
        "rectangle" : {"$ref" : "#/definitions/Rectangle" }
    },
    "definitions" : {
        "size" : {
            "type" : "number",
            "minimum" : 0
        },
        "Rectangle" : {
            "type" : "object",
            "properties" : {
                "a" : {"$ref" : "#/definitions/size"},
                "b" : {"$ref" : "#/definitions/size"}
            }
        }
    }
}

示例JSON:

{
    "rectangle" : {
        "a" : -5,
        "b" : 5
    }
}

在这种情况下,抛出的ValidationException将指向#/rectangle/a

try {
  schema.validate(rectangleSingleFailure);
} catch (ValidationException e) {
  // prints #/rectangle/a: -5.0 is not higher or equal to 0
  System.out.println(e.getMessage());
}

答案 2 :(得分:0)

您可以查看此library。您可以针对JSON模式验证Java POJO。它支持JSON模式v3和v4。