JSONシリアル化にJacksonを使用するJavaコードを書いています。@JsonTypeName(/*Insert string here*/)
このクラスのオブジェクトにシリアル化用の一意の識別子を与えるために、クラスの前に使用する必要がある注釈の1つはです。現在のコードでは、別のクラスのグローバル定数を使用してString引数を設定しています。例:
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)
。私は個人的に、これがグローバル文字列定数のクラスを使用するための非常に堅牢なコーディングスタイルであるとは思いません。アプリケーションが大量の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の値は定数式である必要があります」というエラーメッセージが表示されます。単純なGoogle/SOF検索により、このSOF投稿が表示され、これがエラーであった理由がわかります。注釈パラメータの文字列値は定数でなければなりません。使用できないのはかなり迷惑ですenum
。
他の誰かがこの問題に遭遇しますか?このタイプの問題に対して受け入れられている解決策は何ですか?注釈に文字列定数の長いリストを使用することになっていますか?列挙型を使用して救済する方法はありますか?他に何か?