无法使用@XmlEnumValue使用Jackson和Jaxb注释序列化枚举

时间:2013-11-28 11:02:34

标签: java json enums jaxb jackson

我正在使用带有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);但这也没有帮助。

知道我错过了什么吗?

TA

1 个答案:

答案 0 :(得分:1)

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

,它应该可以正常工作
private EnumMap<Period, POJO1> overtimeRates = new EnumMap<Period, POJO1>(Period.class);