柔軟な API を構築したいのですが、ユーザーが渡すことができる大文字と小文字の区別が明確ではないため、GSON は大文字と小文字を区別してこれをデシリアライズできる必要があります。
{"firstName":"Juan"}
{"firstname":"Juan"}
{"Firstname":"Juan"}
...
これらのフィールドを Foo の firstName に逆シリアル化するにはどうすればよいですか?
public class Foo {
private String firstName;
//..getters
}
FieldNamingPolicy を使用しようとしましたが、機能しませんでした。
new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
ベストアンサー1
ほぼ望みどおりの結果を得るためのより簡単な方法があります。私は気づいていませんでしたが、GSON 2.4 以降、SerializedName
注釈は GSON がデシリアライズできる代替名の配列をサポートしています。
public class Foo {
@SerializedName(value = "firstName", alternate = {"firstname", "Firstname"})
private String firstName;
public java.lang.String getFirstName() {
return firstName;
}
@Override
public String toString() {
return "Foo:" + firstName;
}
}
これを使用すると、「firSTNAme」のようなものを処理できなくても、可能性のあるバリエーションをサポートできます。
https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html
GSON には、希望どおりにカスタマイズするための簡単な組み込み方法はないようです。技術的には、リフレクションを使用してこれを実行できるように見えますTypeAdapterFactory
が、やりすぎのようです。
代替名やパターン、大文字と小文字を区別しない一致をサポートするフィールド命名戦略のサポートを導入することについて、GSON で機能リクエストを開くことができます。