У меня есть сложный класс модели в Java, который имеет атрибуты другого класса. Я хотел получить схему класса в формате yml для лучшей читаемости. Мне удалось получить структуру класса в файле JSON, но я чувствую, что yml менее загроможден и его легко подготовить.

Пример От

public class Phone {
    public String name;
    public String number;
}

Кому

Phone:
    fields:
      name:
        type: String
      number:
        type: String
5
Nandish A 29 Окт 2015 в 12:06

4 ответа

Лучший ответ

Библиотека Джексона предлагает возможность генерировать JSONSchema из класса Java. Вы должны иметь возможность сериализовать его в YAML, хотя я на самом деле не тестировал эту часть. Вот как это может выглядеть:

ObjectMapper m = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
m.acceptJsonFormatVisitor(m.constructType(Phone.class), visitor);
JsonSchema jsonSchema = visitor.finalSchema();

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
mapper.writeValue(yamlFile, jsonSchema);

Вам может понадобиться эта конфигурация, если вы используете перечисления

mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true);

Дополнительные сведения см. На странице github о модуле Yaml и модуль схемы JSON

4
Manos Nikolaidis 29 Окт 2015 в 09:51

Из ОЗУ в файл

Если ваш вариант использования - просто сериализовать существующие объекты, не читая их сначала, вы можете попробовать подход из этого ответа, используя Джексон; он просто записывает в файл объект example.

// Create an ObjectMapper mapper for YAML
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

// Write object as YAML file
mapper.writeValue(new File("/path/to/yaml/file"), example);
0
manuelvigarcia 31 Май 2019 в 11:43

Другой подход может заключаться в чтении файлов классов с помощью библиотеки ASM. У него есть приятный API для посетителей, который позволяет довольно просто преобразовать байт-код в другое представление, такое как YAML (начните здесь: http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/ClassVisitor.html). Но это может оказаться излишним для вашей задачи.

0
erosb 29 Окт 2015 в 09:26

Вы можете попробовать http://jyaml.sourceforge.net/ Однако проект больше не активен.

0
Mohit 29 Окт 2015 в 09:24