【问题标题】:Cannot serialize enum with Jackson and Jaxb annotation using @XmlEnumValue无法使用 @XmlEnumValue 序列化带有 Jackson 和 Jaxb 注释的枚举
【发布时间】: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


【解决方案1】:

您没有显示包含OvertimeRates 属性的POJO 类,所以我只能猜测这是Map。你能把它改成EnumMap吗?如果您将属性更改为:

private EnumMap<Period, POJO1> overtimeRates = new EnumMap<Period, POJO1>(Period.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2011-12-07
    • 1970-01-01
    • 2014-01-08
    • 2015-10-19
    • 2012-03-07
    相关资源
    最近更新 更多