【发布时间】:2013-11-28 11:02:33
【问题描述】:
我正在使用带有 JAXB 注释类的 Jackson 2.2.2。我想将枚举序列化为 int 数字。由于 XML(因为我也希望 XML 具有相同的行为),所以有必要使用 @XmlEnumValue 等。一切都很好。 对于 JSON 的序列化,支持根据 Jackson 文档的此注释,但到目前为止还没有运气使其适用于 JSON(XML 很好)。
@XmlType(name = "Period")
public enum Period {
@XmlEnumValue("11")
DAILY("Daily"),
@XmlEnumValue("1")
WEEKLY("Weekly"),
@XmlEnumValue("2")
SEVENTH_DAY("3");
private final String value;
...
生成的 JSON 仍如下所示:
"OvertimeRates": {
"DAILY": [
{
"AfterHours": -19497,
"Rate": 3.7003279564106983
}
]
},
虽然我希望改为每天看到 11。
我的代码:
mapper = new ObjectMapper();
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
mapper.registerModule(jaxbAnnotationModule);
mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
// mapper.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, false);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
final PosData posData = dataGenerator.getPosData();
try {
mapper.writeValue(new File(PATH_TO_FILE), posData);
} catch (IOException e) {
e.printStackTrace();
}
我尝试使用 mapper.configure(SerializationFeature.WRITE_ENUMS_USING_INDEX, false);但这也无济于事。
知道我错过了什么吗?
塔
【问题讨论】:
-
例如,当您的枚举是类中的一个属性时,它的效果非常好。在您的场景中,Period 是地图中的一个键或类似的东西。你能改变你的 POJO 类或 JSON 吗?如果不是,可能你必须在 map 序列化器上编写自己的密钥序列化器。
标签: java json enums jaxb jackson