2014-10-05 2 views
20

У меня есть Pojo классГенерирование JSON-схему из класса Java

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" 
     } 
} 
+0

Это тот, что вы ищете? http://stackoverflow.com/questions/9593409/convert-pojo-to-json – Elric

+0

Нет, это преобразует pojo в объект json. Я ищу для генерации JSON-схемы как мета [информацию о полях входной формы, сопоставленных полям pojo, например, тип данных, независимо от того, требуется ли это или нет и т. Д.) Конечным пользователям). – user3587174

+0

Вот онлайн-сайт, который будет генерировать json-схему из json: http://www.jsonschema.net/ – DwB

ответ

4

Одним из таких инструментов является Джексон JSON Schema модуль:

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

который использует POJO самоанализ Джексона DataBind для обхода свойств POJO, принимая во внимание Джексон аннотации и производит объект JSON Schema, который затем может быть сериализована как JSON или использована для других целей.

+0

Указанный вами модуль не работает, если у вас есть сложные объекты, содержащие типы перечислений, которые должны содержать перечисления. См. Мой ответ ниже для лучшего инструмента (Still Jackson, но jackson-mapper.) Инструкции по вашей ссылке приводят к тому, что Enums отображаются как простые строки в схеме – StormeHawke

+0

Да, я видел отчет об ошибке.Надеюсь, что мы получим больше вкладов в модуль - это внешний вклад, довольно широко используемый, но на данный момент нет преданного владельца. – StaxMan

14

Я столкнулся с необходимостью сделать это сам, но вам нужно было получить последнюю спецификацию схемы (v4 на этом посту). Мое решение - это первый ответ по следующей ссылке: Generate Json Schema from POJO with a twist

Используйте объекты из пакета org.codehaus.jackson.map, а не пакет com.fasterxml.jackson.databind. Если вы следуете инструкциям на странице this, тогда вы делаете это неправильно. Вместо этого используйте модуль jackson-mapper.

Вот код для будущих Googlers:

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); 
} 
+0

FWIW было бы здорово сделать эту работу с внешним модулем только потому, что встроенный механизм генерации устарел (по крайней мере, это план). И наоборот, нет никакого технического блока, чтобы заставить его работать там. Но до тех пор хорошо знать, что есть обход. – StaxMan

+0

@StaxMan, так как вы, кажется, немного об этом знаете, можете ли вы взглянуть на это и сказать мне, есть ли у вас какие-либо подсказки? Благодаря! http://stackoverflow.com/questions/7161638/how-do-i-use-a-custom-serializer-with-jackson/22108535#22108535 – StormeHawke

+0

Я посмотрю, смогу ли я помочь - спасибо за сообщение об этом & извиниться за то, что не работает так, как должно. – StaxMan

1

Использование JJschema. Он может создавать схемы, совместимые с 4-мя JSON. Обратитесь к этому сообщению http://wilddiary.com/generate-json-schema-from-java-class/.

Хотя Jackson Json Schema module может также генерировать схему, но на сегодняшний день он может генерировать только черновики 3-х совместимых схем.

+0

https://github.com/mbknor/mbknor-jackson-jsonSchema может генерировать схему Draft 4 на основе аннотаций Джексона – mbknor

Смежные вопросы