我正在編寫使用Jackson進行JSON序列化的Java代碼。在我的一個類之前我必須使用的一個註釋是@JsonTypeName(/*Insert string here*/)
,以便爲此類的對象提供用於序列化的唯一標識符。在我當前的代碼中,我們通過使用另一個類的全局常量來設置String參數。例如:Java無法將enum用作註釋的String參數(例如:Jackson)
public class AnnotationValues {
private static final String id1 = "1";
private static final String id2 = "2";
private static final String id3 = "3";
// And so on...
}
使用這個類,我們的註解大概類似於@JsonTypeName(AnnotationValues.id1)
。我個人不認爲這是一種非常健壯的編碼風格,使用一類全局的String常量。一旦我的應用程序需要處理大量的JSON消息並因此需要許多不同的標識符,這將變得煩人。我自然會通過使用enum
來解決這個問題。我會替換類:
public enum AnnotationValues {
ID1("1"),
STATS_RESPONSE("2"),
SESSION_RESPONSE("3"),
/* Add more... */;
public final String value;
private AnnotationValues(String value) {
this.value = value;
}
}
使用這個枚舉,我想寫@JsonTypeName(AnnotationsValues.ID1.value)
作爲我的註釋。但這不起作用。我收到此錯誤消息:「註釋屬性JsonTypeName.value的值必須是常量表達式」。一個簡單的谷歌/ SOF搜索導致我this SOF post告訴我爲什麼這是一個錯誤;註釋參數的字符串值必須是常量。很煩人,我不能使用enum
。
是否有其他人遇到這個問題?什麼是這種類型的問題接受的解決方案?我真的應該爲我的註釋使用一串很長的字符串常量嗎?有什麼方法可以使用我的Enum打撈?還要別的嗎?
對不起,但這是不是重複您引用該帖子的副本? http://stackoverflow.com/questions/3271659/use-enum-type-as-value-parameter-for-rolesallowed-annotation – Gray