【问题标题】:Reactive WebTestClient json deserialization with inheritance issue具有继承问题的反应式 WebTestClient json 反序列化
【发布时间】:2018-08-29 15:24:14
【问题描述】:

我有一个 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)...

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

我能想到的解决方法是读取为字符串并使用我定制的反序列化器。但不确定是否有任何其他方法可以优雅地实现这一目标。

谢谢

【问题讨论】:

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


    【解决方案1】:

    解决了,刚刚找到基类中需要的JsonTypeInfo注解

    【讨论】:

    • 您能用代码 sn-p 详细说明您的答案吗?这可能会帮助其他人。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2021-12-25
    • 1970-01-01
    • 2020-09-13
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多