Метод @Transient вызывает ошибку «Нераспознанное поле (…), не помеченное как игнорируемое» - PullRequest
0 голосов
/ 21 марта 2019

Я сериализирую класс Java для передачи его моему клиенту в виде объекта JSON.Класс имеет различные атрибуты и набор @Transient методов, которые объединяют подмножество этих свойств.Временные методы не имеют переменных для их резервного копирования.

public class Person {
  private String firstName;
  private String lastName;

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getLastName() {
    return lastName;
  }

  @Transient
  public String getFullName() {
    return firstName + " " + lastName;
  }
}

При чтении объекта с сервера это работает нормально.Однако когда я пытаюсь сохранить объект JSON, он вызывает эту ошибку для временных методов:

"Нераспознанное поле (...), не помечено как игнорируемое"

Я не хочу вводить переменные для переходных свойств, но все же хочу передать возвращаемое значение переходных методов с сервера на клиент.Как мне этого добиться?

Я попробовал вот что, но я не уверен, полностью ли я понял идею аннотаций @Json*:

@Transient
@JsonProperty
public String getFullName() {
  return firstName + " " + lastName;
}

@JsonIgnore
public void setFullName(String fullName) {
  // Empty method
}

По моему мнению, наличие пустого сеттера не имеет большого смысла.Но, может быть, мое предположение о передаче атрибута без свойства, представляющего его, было неверным, в первую очередь!?

1 Ответ

0 голосов
/ 21 марта 2019

Использование JsonIgnoreProperties аннотация:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {

Из документации:

Свойство, которое определяет, можно ли просто игнорировать любое нераспознанное свойства при десериализации. Если это правда, все свойства, которые нераспознанные - то есть, нет сеттеров или создателей, которые принимают их - игнорируются без предупреждений (хотя обработчики для неизвестных свойства, если таковые имеются, все равно будут вызываться) без исключения. Не влияет на сериализацию.

Смотри также:

...