

RetrofitのGsonConverterにFieldNamingPolicyを渡すとキー変換が自動化される
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
APIのレスポンスがスネークケース(user_nameとかcreated_atとか)で返ってくるとき、Javaのフィールド名はキャメルケースで書きたい。今まで愚直に@SerializedName("user_name")をフィールドごとに付けてたけど、FieldNamingPolicyを使えばこの作業がまるごと不要になるらしい。
何が起きたか
GsonのGsonBuilderにはsetFieldNamingPolicy()というメソッドがあって、ここにFieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORESを渡すと、Javaのキャメルケースフィールド名を自動でスネークケースに変換してJSONキーとマッチしてくれる。
Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create();これをRetrofitのGsonConverterFactory.create()に渡すだけ。
Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create(gson)) .client(client) .build();例えばuserNameというフィールドはuser_nameキーと自動でマッチする。逆に言うと、変換規則から外れるキー(一部だけキャメルケースのまま返ってくるとか)があると、そこだけは変換されないので@SerializedNameで個別に上書きする必要がある。
結論
命名規則が一貫してるAPIなら、FieldNamingPolicyに任せたほうがコードがすっきりする。全フィールドに@SerializedNameを書き並べる必要がなくなるし、フィールド追加のたびにアノテーション付け忘れる事故も減る。ただし規則から外れるキーが混ざってるAPIだと、そこだけ個別対応が必要になる点は覚えておく。