2013-11-28 44 views
1

我使用Jackson 2.2.2和JAXB註釋類。我想枚舉序列化爲int數字。由於XML(因爲我希望XML的行爲也一樣),所以有必要使用@XmlEnumValue等等。一切正常。 對於序列化到JSON這個註釋根據Jackson的文檔支持,但到目前爲止沒有運氣使它適用於JSON(XML很好)。無法使用@XmlEnumValue序列化使用Jackson和Jaxb註釋的枚舉

@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 
      } 
     ] 
     }, 

雖然我預料,而不是DAILY我會看到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);但那也沒有幫助。

任何想法我錯過了什麼?

+0

它的作品相當不錯,當你的枚舉是一個類中的屬性,例如。在你的場景中,期間是地圖中的關鍵或類似的東西。你能改變你的POJO類或JSON嗎?如果否,可能需要在映射序列化器上編寫自己的關鍵序列化程序。 –

回答

1

你沒有表現出含有OvertimeRates財產,所以我只能猜測,這是你的Map POJO類。你能把它改成EnumMap嗎?它應該正常工作,如果你改變你的財產:

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

你是對的!謝謝! – jaksky