Джексон делает дополнительную инициализацию после вызова @JsonCreator - PullRequest
1 голос
/ 11 февраля 2020

У меня есть простой класс A:

@Getter
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
class A {

  private final String incomeField;
  private final String anotherIncomeField;
  private final String fixedValueField;

}

class B extends A {

  private B(final String incomeField, final String anotherIncomeField) {
    super(incomeField, anotherIncomeField, "someFixedValue");
  }

  @JsonCreator
  public static B of(@JsonProperty("incomeField") final String incomeField, @JsonProperty("anotherIncomeField") final String anotherIncomeField) {
      return new B(incomeField, anotherIncomeField);
  }
}

Когда я отправляю sh сообщение ActiveMQ через jmsTemplate.convertAndSend(destination, new B("foo", "bar")), фактическое сообщение в очереди следующее:

{
   "incomeField": "foo",
   "anotherIncomeField": "bar",
   "fixedValueField": null
}

Я обрабатываю сообщения JMS с помощью @JmsListener(destination = "my-destination) и получаю объект типа B с fixedValueField, установленным на null, в то время как я ожидаю, что он будет someFixedValue, как я его установил в конструкторе private.

Когда я отлаживаю все эти вещи, я вижу, что @JsonCreator вызывается правильно, и мой объект имеет ожидаемые значения для всех полей, но когда Джексон заканчивает десериализацию, я вижу, что fixedValueField равен null. Почему это может произойти?

Обратите внимание, что все поля: final

Среда:

  • Java 11
  • Spring Boot 2.1 .3.RELEASE
  • Джексон 2.9.8
  • ActiveMQ 5.15.8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...