从java类生成JSON模式

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

我有一个POJO课

public class Stock{
 int id;
 String name;
 Date date;
}

是否有任何注释或开发框架/ api可以将POJO转换为JSON模式,如下所示

{"id":
      {             
        "type" : "int"
      },
"name":{   
        "type" : "string"
       }
"date":{
        "type" : "Date"
      }
}

也可以通过在POJO上指定一些注释或配置来扩展模式以添加诸如“必需”,“是”,每个字段的描述等的信息,并且可以像下面那样生成JSON模式。

{"id":
      {             
        "type" : "int",
        "Required" : "Yes",
        "format" : "id must not be greater than 99999",
        "description" : "id of the stock"
      },
"name":{   
        "type" : "string",
        "Required" : "Yes",
        "format" : "name must not be empty and must be 15-30 characters length",
        "description" : "name of the stock"
       }
"date":{
        "type" : "Date",
        "Required" : "Yes",
        "format" : "must be in EST format",
        "description" : "filing date of the stock"
      }
}
提问于
用户回答回答于

Jackson JSON Schema模块就是一个这样的工具:

https://github.com/FasterXML/jackson-module-jsonSchema

它使用Jackson数据绑定的POJO内省来遍历POJO属性,同时考虑到Jackson注释,并生成一个JSON Schema对象,然后将其序列化为JSON或用于其他目的。

用户回答回答于

我遇到了需要自己做这件事,但需要获取最新的模式规范(本文后的第4版)。我的解决方案是以下链接的第一个答案: 从POJO生成Json Schema并进行转换

使用org.codehaus.jackson.map包中的对象而不是com.fasterxml.jackson.databind包。如果你按照这个页面上的说明,那么你做错了。只需使用jackson-mapper模块。

以下是未来Google的代码:

private static String getJsonSchema(Class clazz) throws IOException {
    org.codehaus.jackson.map.ObjectMapper mapper = new ObjectMapper();
    //There are other configuration options you can set.  This is the one I needed.
    mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true);

    JsonSchema schema = mapper.generateJsonSchema(clazz);

    return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
}

扫码关注云+社区