java类的JSON Schema

时间:2014-08-26 19:09:48

标签: javascript json jaxb jax-rs jsonschema

我使用Jackson 1.5生成JSON模式并尝试为java类生成json模式

我为Employee类尝试了以下代码

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Employee")
public class Employee {
int id;
String name;
Date date;
}

ObjectMapper mapper = new ObjectMapper();
JsonSchema jsonSchema = mapper.generateJsonSchema(Employee.class);

上面的代码为日期字段生成了数字类型,我是否需要指定任何注释来转换日期类型?

{
 "type": "object",
 "optional": true,
 "items":    {
 "type": "number",
 "optional": true
},
 "properties":{
   "id":       {
     "type": "integer",
     "optional": true
  },
  "name":       {
     "type": "string",
     "optional": true
  },
  "date":       {
     "type": "number",
     "optional": true
  }
}
}

此外,如果需要字段(例如,id),我如何指定在JSON模式中显示为“required”:true?

2 个答案:

答案 0 :(得分:1)

不幸的是,Jackson不支持验证,例如验证必需的字段。 Beans Validation可以为此完成。

对于日期转换问题,Jackson FAQ可以很好地展示处理此问题的所有方法。

答案 1 :(得分:0)

“必需”可以使用“@JsonProperty(required = true)”注释指定。

public class Employee {
    @JsonProperty(required = true)
    int id;

    String name;

    Date date;
}

JSON模式标准中没有原始的“日期”类型,也没有对Jackson中任何日期验证注释的固有支持。

但是,有一种名为“format”的JSON模式概念,它阐明了“字符串”类型。这里支持的基本格式之一是“日期时间”,它意味着使用RFC 3339, section 5.6.给出的格式的日期。映射器可以支持这种格式,但如果没有明显的扩展,就不可能将“格式”注释添加到JSON模式中。