Ответ
В библиотеке Gson (Google's JSON library для Java) аннотации полей используются для тонкого управления процессом сериализации (преобразование объекта в JSON) и десериализации (преобразование JSON в объект). Они позволяют переопределить стандартное поведение Gson.
Основные аннотации:
-
@SerializedName— Указывает имя поля в JSON, если оно отличается от имени поля в Java-классе.public class User { @SerializedName("full_name") // В JSON будет ключ "full_name" private String name; private String email; } // Сериализуется в: {"full_name":"John","email":"john@example.com"} -
@Expose— Пометка поля для явного включения или исключения из процессов сериализации/десериализации. Работает только в паре сGsonBuilder().excludeFieldsWithoutExposeAnnotation().public class User { @Expose // Будет включено и в сериализацию, и в десериализацию private String name; @Expose(serialize = false) // Будет проигнорировано при сериализации (в JSON не попадет) private String passwordHash; private String internalToken; // Без @Expose - будет проигнорировано при использовании excludeFieldsWithoutExposeAnnotation() } Gson gson = new GsonBuilder() .excludeFieldsWithoutExposeAnnotation() // Критически важно! .create();
Почему это важно: Аннотации дают контроль над форматом JSON (совместимость с внешними API) и безопасностью (исключение конфиденциальных полей, таких как пароли или токены, из выходного JSON). Без @Expose и соответствующего GsonBuilder все не-transient и не-static поля сериализуются по умолчанию.