56

getter/setter に @JsonProperty アノテーションを持つ特定のビット コードを継承しました。その目的は、Jackson ライブラリを使用してオブジェクトをシリアル化するときに、フィールドに特定の名前が付けられるようにすることです。

現在のコード:

private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

別のツールとして、JsonProperty でフィールドに注釈を付ける必要があります。だから、これは私の変更されたコードになります:

@JsonProperty("FILENAME")
private String fileName;

@JsonProperty("FILENAME")
public String getFileName()
{
    return fileName;
}

@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

フィールドとゲッター/セッターの両方でこの同じ注釈を使用した人はいますか? ネットを見回しましたが、何もありませんでした。

コードをコンパイルして実行しましたが、これが今後問題を引き起こすかどうかはわかりません。これについて何か考えはありますか?

4

2 に答える 2

54

いくつかのテストに基づく私の観察では、プロパティ名とは異なる名前が有効になるということです。

たとえば。ケースを少し変更することを検討してください。

@JsonProperty("fileName")
private String fileName;

@JsonProperty("fileName")
public String getFileName()
{
    return fileName;
}

@JsonProperty("fileName1")
public void setFileName(String fileName)
{
    this.fileName = fileName;
}

fileNameフィールドとメソッドの両方getFileNameに正しいプロパティ名がfileNameありsetFileName、別のプロパティ名がありますfileName1。この場合、JacksonはfileName1逆シリアル化の時点でjsonの属性を検索し、シリアル化の時点で呼び出される属性を作成しますfileName1

ここで、3つの@JsonPropertyすべてがデフォルトのpropertynameのとは異なる場合、fileNameそれらの1つをattribute(FILENAME)として選択し、3つのうちのいずれかが異なると、例外がスローされます。

java.lang.IllegalStateException: Conflicting property name definitions
于 2012-07-17T18:45:37.297 に答える
11

既存の良い答えに加えて、Jackson 1.9は、「プロパティの統合」を追加することで処理を改善したことに注意してください。つまり、論理プロパティの異なる部分からのすべての注釈が、(うまくいけば)直感的な優先順位を使用して結合されます。

Jackson 1.8以前では、シリアル化(JSONの記述)の内容と方法を決定する際に、フィールドとゲッターの注釈のみが使用されていました。逆シリアル化(JSONの読み取り)用のセッターアノテーションのみ。これには、ゲッターとセッターの両方に注釈を付けるなど、「余分な」注釈を追加する必要がある場合がありました。

Jackson 1.9以降では、これらの追加の注釈は必要ありません。それらを追加することはまだ可能です。また、異なる名前が使用されている場合は、「分割」プロパティを作成できます(1つの名前を使用してシリアル化、他の名前を使用して逆シリアル化)。これは、名前の変更に役立つ場合があります。

于 2012-07-18T19:02:25.987 に答える