Реактивная десериализация WebTestClient json с проблемой наследования - PullRequest
0 голосов
/ 29 августа 2018

У меня есть один API, возвращающий список. Каждый элемент в выводе json будет подклассом, унаследованным от BaseItem. Э.Г.

class ItemA extends BaseItem{
  Integer quantity;

  @JsonCreator
  ItemA(@JsonProperty(value="quantity", required=true) Integer quantity, ...) {
     super(...);
     this.quantity = quantity;
  }
}

class ItemB extends BaseItem {
  Boolean enabled;

  @JsonCreator
  ItemB(@JsonProperty(value="enabled", required=true) Boolean enabled, ...) {
   super(...);
   this.enabled = enabled;
  }
}

Сериализация webflux api выполнена и работает хорошо.

Я слежу за https://www.baeldung.com/jackson-inheritance и добавил конструкторы @JsonCreator в мои подклассы. Но я предполагаю, что по умолчанию это работает только для десериализации RequestBody.

Когда я пытался написать тестовые случаи, используя webTestClient, если я просто написал webTestClient.get (...). Exchange (). HopeBody (BaseItem.class) ...

Он не десериализует элемент в соответствующие подклассы (не экземпляры подклассов).

Обходной путь, о котором я могу думать, - это чтение в виде String и использование моего собственного десериализатора. Но не уверен, есть ли какие-либо другие способы, чтобы добиться этого изящно.

Спасибо

1 Ответ

0 голосов
/ 29 августа 2018

Решено, только что нашел аннотацию JsonTypeInfo, необходимую в базовом классе

...