【问题标题】:JsonTypeInfo not shown in response whit PageableJsonTypeInfo 未在 Pageable 响应中显示
【发布时间】:2019-10-11 01:55:53
【问题描述】:

我有一个抽象类

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "_type", visible = true, include = As.EXISTING_PROPERTY)
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
    @JsonSubTypes({
       @Type(value = B.class, name = "B"),
       ...
    })
    public abstract class A {
      ...
    }

和子类之一

@DiscriminatorValue("B")
@JsonTypeName("B")
public class B extends A {
  ...
}

当我想创建一个实体时,我需要指定“_type”属性。这非常好。但是当我想要一个 A-s 列表时,我无法获得 JSON 响应中指定的属性“_type”。

我尝试了多种解决方案,但找不到正确的方法。 我尝试添加带有事务的“_type”属性,尝试添加"include = JsonTypeInfo.As.PROPERTY"。但还是一无所获。

当然,我只有一个 A 类控制器。

谁能告诉我如何在获取响应和其他响应中获取“_type”?

tnx

【问题讨论】:

  • 我猜你的控制器方法类似于List<A> loadA(...) 带有一些Spring 注释。不是吗?我注意到当List 是根对象时,泛型的类型信息会被跳过。尝试创建ListAResponse 类并使用List<A> aList; 属性包装这个List。之后尝试将您的控制器方法更改为ListAResponse loadA(...)。应该管用。你用的是JacksonSpring的哪个版本?
  • 我在控制器中返回的方法类型是 Page 和 Pageable 请求。 Spring 版本是 2.0.6,Jackson 版本是 2.9.9
  • 我忘了告诉你所有的工作都与列表有关。但是当我输入 Page 和 pageable 时,我无法输入响应。
  • 有什么解决办法吗?我也面临这个问题
  • 很遗憾没有。可以编写一个将 _type 粘贴到所有实体上的切面,但这不是最佳解决方案。

标签: java json spring jackson jackson2


【解决方案1】:

它看起来像一个错误,但不确定在哪里。无论如何,我今天找到了解决方法。

@GetMapping
public Page<MyObject> findAll(Pageable pageable) {
   Page<MyObject> page = ...;
   return new PageImpl<>(page.getContent(), pageable, page.getTotalElements()) {};
}

请注意,此处将返回扩展 PageImpl 的匿名类的新实例(不是 PageImpl 的新实例)以防止类型擦除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2019-02-01
    • 2021-11-07
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多