У меня проблема с якорями и преобразованием 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
Любые способы добиться этого?