私はGsonを学ぼうとしていますが、フィールド除外に苦労しています。これが私のクラスです
public class Student {
private Long id;
private String firstName = "Philip";
private String middleName = "J.";
private String initials = "P.F";
private String lastName = "Fry";
private Country country;
private Country countryOfBirth;
}
public class Country {
private Long id;
private String name;
private Object other;
}
firstName
GsonBuilder を使用して、やなどのフィールド名に ExclusionStrategy を追加することはできますcountry
が、 などの特定のフィールドのプロパティを除外することはできないようですcountry.name
。
メソッドを使用するとpublic boolean shouldSkipField(FieldAttributes fa)
、FieldAttributes には、 のようなフィルターとフィールドを一致させるのに十分な情報が含まれていませんcountry.name
。
PS: これを改善し、正規表現を使用してフィールドをフィルター処理したいので、注釈は避けたいと思います。
編集:私は、次の動作をエミュレートできるかどうかを確認しようとしていますStruts2 JSONプラグイン
Gsonを使用する
<interceptor-ref name="json">
<param name="enableSMD">true</param>
<param name="excludeProperties">
login.password,
studentList.*\.sin
</param>
</interceptor-ref>
編集:次の内容を追加して質問を再開しました:
この問題をさらに明確にするために、同じタイプの 2 番目のフィールドを追加しました。基本的に、 を除外したいのですcountry.name
が、 は除外したくありませんcountrOfBirth.name
。また、 Country をタイプとして除外したくありません。つまり、タイプは同じであり、オブジェクト グラフ内の実際の場所を特定して除外したいのです。
ベストアンサー1
一般的にシリアル化したくないフィールドには、「transient」修飾子を使用する必要があります。これは、json シリアライザーにも適用されます (少なくとも、gson を含む私が使用したいくつかのシリアライザーには適用されます)。
シリアル化された JSON に名前を表示したくない場合は、一時的なキーワードを指定します。例:
private transient String name;