【发布时间】:2016-01-08 09:13:03
【问题描述】:
我正在尝试 @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<SomeKey, Object> data;中放入数据? -
实际上,我只是想重现这一点,在我看来,使用@JsonValue 不是调用序列化程序,它只是调用 SomeKey.toString()。这不是你看到的吗?
-
没错,这是我的问题:)。
-
值得提交一个错误——组合注释很棘手,
@JsonValue的处理与常规 getter 非常不同......但无论如何,理想情况下这种组合应该有效。它实际上似乎可以发挥作用。
标签: java json dictionary jackson serialization