Почему JAX-RS игнорирует временное ключевое слово - PullRequest
0 голосов
/ 17 мая 2018

В следующем объекте:

class Foo implements Serializable {
    transient String bar;
    String baz;
}

JAX-RS будет игнорировать временное ключевое слово и по-прежнему сериализовать bar в ответах.Чтобы прекратить сериализацию в этом случае, вам нужно использовать аннотацию (например, @XmlTransient).В чем причина этого требования?На первый взгляд.кажется, что достаточно только ключевого слова.

В каких случаях использование ключевого слова может быть недостаточным / ненадлежащим, и требуется аннотация?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Аннотации хороши тем, что они имеют пространство имен, позволяя нескольким API аннотировать одни и те же поля, не наступая друг другу на ноги:

  • @XmlTransient делает его переходным к JAX-RS.
  • @JsonIgnore делает его переходным к Джексону.
  • @Expose, чтобы сделать его непереходным в GSON.
  • Вы можете использовать ни одного, ни одного, ни все.

К сожалению, аннотации впервые были поддержаны в Java 1.5 в 2004 году, а сериализация была добавлена ​​в Java 1.1 в 1997 году.

Поскольку у них не было аннотаций, объявляемых пользователем, они вместо этого добавилиключевое слово transient.Если бы он был выпущен сегодня, он, несомненно, использовал бы собственную аннотацию, специфичную для API сериализации.

JAX-RS решил рассматривать transient, как если бы это была просто другая аннотация, специфичная для API.Это был хороший вызов, потому что легко добавлять аннотации другого API, но он может стать сложным и подверженным ошибкам, если несколько API пытаются интерпретировать аннотации друг друга.

0 голосов
/ 17 мая 2018

Это просто решение, принятое дизайнерами фреймворков. Он предоставляет разработчикам больше гибкости за счет немного большей сложности, хотя у них могли быть другие причины для их решения.

Гибкость в том, что сериализация, которая является первоначальной целью переходного процесса, может пропускать поле, но поле все еще может заполняться JAX-RS, и наоборот. Кроме того, это четко разделяет проблемы.

...