Я пробую комбинацию @JsonValue
и @JsonSerialize
. Давайте начнем с моим текущим классом контейнера:Jackson - комментировать @JsonValue и @JsonSerialize
public class Container {
private final Map<SomeKey, Object> data;
@JsonValue
@JsonSerialize(keyUsing = SomeKeySerializer.class)
public Map<SomeKey, Object> data() {
return data;
}
}
В этом случае обычай сериализатор SomeKeySerializer
не используется.
Если изменить контейнер, как следующее, сериализатор называется:
public class Container {
@JsonSerialize(keyUsing = SomeKeySerializer.class)
private final Map<SomeKey, Object> data;
}
Однако, это не то, что я хочу, так как это вводит еще один уровень «данные» в выходных данных JSON.
Возможно ли совместить @JsonValue
и @JsonSerialize
в некотором роде?
Я всегда мог написать другой пользовательский сериализатор для Container
, который более или менее аналогичен функциям позади @JsonValue
. На мой взгляд, это будет более или менее взломанным.
версия Джексон: 2.6.2
Как вы помещаете данные в 'private final Map data;'? –
Filip
На самом деле, я просто пытался воспроизвести это, и мне кажется, что использование @JsonValue не вызывает сериализатор, это просто вызов SomeKey.toString(). Разве это не то, что вы видите? – araqnid
Точно, это мой вопрос :). –