根据所需xml标记的要求标记json架构字段

时间:2018-02-21 19:55:35

标签: java jackson jsonschema

我以这样的方式从XSD生成JSON模式: https://dzone.com/articles/generating-json-schema-xsd

一切正常但除了它没有标记XSD标记所需的字段(根据需要标记)(或minOccurs =" 1")。 杰克逊图书馆可以吗? 还是其他一些工具?

我需要这样的东西:

{
"type": "object",
"required": true,
"properties": {
    "field": "value" ...

1 个答案:

答案 0 :(得分:0)

好的,这是一个答案。 您只需在ObjectMapper实例中注册新的JaxbAnnotationModule。 这是一段代码:

import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;

    ObjectMapper objectMapper = new ObjectMapper();
    TypeFactory typeFactory = TypeFactory.defaultInstance();
    AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(typeFactory);
    mapper.getDeserializationConfig().with(introspector);
    mapper.getSerializationConfig().with(introspector);

    //To force mapper to include JAXB annotated properties in Json schema
    objectMapper.registerModule(new JaxbAnnotationModule());
    SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
    objectMapper.acceptJsonFormatVisitor(objectMapper.constructType(YOUR_JAXB_CLASS.class), visitor);

    JsonSchema inputSchema = visitor.finalSchema();
    String schemaString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(inputSchema);

    System.out.println(schemaString);