Мне нужно сгенерировать схему json из моих POJO. Требование состоит в том, что каждый POJO должен быть экспортирован как отдельный файл, а ссылки внутри схемы json должны обрабатываться соответствующим образом. Это означает, что библиотека должна отслеживать, какой POJO экспортируется в какой файл. Я нашел эту библиотеку: https://github.com/mbknor/mbknor-jackson-jsonSchema, и она отлично работает, но кажется (или, по крайней мере, я не могу найти такую опцию), что я не могу выполнить требования без специального кодирования. Знаете ли вы какую-либо другую библиотеку, которая поддерживает это?




Вы можете использовать Джексона для создания схемы JSON, используя следующие зависимости maven
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jsonSchema</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.11</version>
</dependency>
Затем вы можете сгенерировать схему, написав что-то вроде этого
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonSchemaGenerator schemaGen = new JsonSchemaGenerator(mapper);
Reflections reflections = new Reflections("my.pojo.model",new SubTypesScanner(false));
Set<Class<?>> pojos = reflections.getSubTypesOf(Object.class);
Map<String, String> schemaByClassNameMap = pojos.stream()
.collect(Collectors.toMap(Class::getSimpleName, pojo -> getSchema(mapper, schemaGen, pojo)));
schemaByClassNameMap.entrySet().forEach(schemaByClassNameEntry->writeToFile(schemaByClassNameEntry.getKey(),schemaByClassNameEntry.getValue()));
}
private static void writeToFile(String pojoClassName, String pojoJsonSchema) {
try {
Path path = Paths.get(pojoClassName + ".json");
Files.deleteIfExists(path);
byte[] strToBytes = pojoJsonSchema.getBytes();
Files.write(path, strToBytes);
}catch (Exception e){
throw new IllegalStateException(e);
}
}
private static String getSchema(ObjectMapper mapper,JsonSchemaGenerator schemaGenerator,Class clazz){
try {
JsonSchema schema = schemaGenerator.generateSchema(clazz);
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(schema);
}catch (Exception e){
throw new IllegalStateException(e);
}
}
Вы включили зависимость jackson-module-jsonSchema?
@PlamenPaskov обновленная версия кода теперь также будет записываться в файл
спасибо за ваше предложение! библиотека, которую я пробовал, основана на Джексоне, и я не вижу никакого способа выполнить требования, которые у меня есть. я что-то пропустил?