Быстрее XML Jackson YAML Печатает якорь в новой строке? - PullRequest
0 голосов
/ 06 августа 2020

У меня проблема с якорями и преобразованием YAML Джексона.

Предположим, у меня есть класс User, подобный этому:

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class User {
    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

И я хочу сериализовать следующий список User в yaml:

public class Main {
    static <T> T fromYaml(Class<T> clazz, String jsonString) {
        try {
            return new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)).readValue(jsonString, clazz);
        } catch (JsonProcessingException e) {
            return null;
        }
    }

    static String toYaml(Object value) {
        try {
            return new ObjectMapper(new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)).writeValueAsString(value);
        } catch (JsonProcessingException e) {
            return "";
        }
    }

    public static void main(String[] args) {
        User user1 = new User(1, "John");
        User user2 = new User(2, "Mark");
        List<User> list = List.of(user1, user2, user1);
        System.out.println(toYaml(list));
    }
}

Вот что я получаю:

- &1 id: 1
  name: "John"
- &2 id: 2
  name: "Mark"
- *1

Некоторые парсеры YAML этого не понимают и думают, что написав &1 id: 1 вы сопоставляете эту карту с привязкой &1, но они правильно понимают, была ли привязка на новой строке, как показано ниже:

- &1 
  id: 1
  name: "John"
- &2 
  id: 2
  name: "Mark"
- *1

Любые способы добиться этого?

...