【发布时间】: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(...)。应该管用。你用的是Jackson和Spring的哪个版本? -
我在控制器中返回的方法类型是 Page 和 Pageable 请求。 Spring 版本是 2.0.6,Jackson 版本是 2.9.9
-
我忘了告诉你所有的工作都与列表有关。但是当我输入 Page 和 pageable 时,我无法输入响应。
-
有什么解决办法吗?我也面临这个问题
-
很遗憾没有。可以编写一个将 _type 粘贴到所有实体上的切面,但这不是最佳解决方案。
标签: java json spring jackson jackson2