Как разобрать строку Java как буквенный блок в YAML - PullRequest
0 голосов
/ 15 января 2019

Мне нужно проанализировать только строки Java description, instructions как буквенные блоки (|) в yaml, поскольку обе вышеуказанные переменные могут содержать многострочные входы и анализировать infoId как обычную строку. Я использую snakeyaml в качестве библиотеки yaml. Как мне достичь вышеупомянутого? Есть ли какая-нибудь аннотация, которую мне нужно использовать для этого?

Класс Pojo

public class Info {

private String infoId;
private String description;
private String instructions;

// Setters and getters
}

класс разбора

...
Info info = new Info();
info.setDescription(descriptionWithMultilines);
info.setIntructions(instructionsWithMultilines);

Yaml yaml = new Yaml();
String yamlString = yaml.dumpAs(info, Tag.MAP, DumperOptions.FlowStyle.BLOCK);
...

1 Ответ

0 голосов
/ 15 января 2019

Если вы хотите исключить определенные свойства, вы можете достичь этого с помощью пользовательского Представителя класса

этот короткий фрагмент

public static void main(String[] args) {
    Info info = new Info();
    info.setInfoId("demo");
    info.setDescription("foo\nbar");
    info.setInstructions("one\ntwo");

    Yaml yaml = new Yaml(new InfoRepresenter());
    String yamlString = yaml.dumpAs(info, Tag.MAP, DumperOptions.FlowStyle.BLOCK);
    System.out.println(yamlString);
}

private static class InfoRepresenter extends Representer {
    @Override
    protected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue,
            Tag customTag) {
        if (javaBean instanceof Info && "infoId".equals(property.getName())) {
            return null;
        } else {
            return super.representJavaBeanProperty(javaBean, property, propertyValue,
                    customTag);
        }
    }
}

производит следующий вывод

description: |-
  foo
  bar
instructions: |-
  one
  two
...