具有继承问题的反应式WebTestClient json反序列化

时间:2018-08-29 15:24:15

标签: java json spring-boot spring-webflux reactive

我有一个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()。expectBody(BaseItem.class)...

它不会将项目反序列化为相应的子类(不是子类的实例)。

我能想到的解决方法是读取String并使用我的自定义反序列化器。但是不确定是否还有其他方法可以优雅地实现这一目标。

谢谢

1 个答案:

答案 0 :(得分:1)

已解决,刚刚在基类中找到所需的JsonTypeInfo批注