这个问题与我之前发布的另一个问题背道而驰,因为我一直在寻找关于 JsonSubTypes
的序列化/验证工作方式的清晰性其他问题:InvalidSchemaException using JsonSubTypes, not picking up what I defined in the base interface
假设我有一个基类 A
A实现 BaseInterface
如果我有一个扩展了 A 的子类 B ,但是实现了它自己的接口,例如 AlpahInterface,BetaInterface,CharlieInterface 。由于AlphaInterface仅列出例如LAMA,因此验证不了解基本BaseInterface中定义的所有其他类型。
子类 B 仅实现了 AlphaInterface 所定义的任何内容,而忽略了它扩展BaseInterface的事实,也忽略了其他已实现的接口,并且显然没有注意以下事实: B扩展了实现BaseInterface的A。我可以验证这一点,因为我向AlphaInterface添加了基本接口中定义的所有子类型,并且一切正常,但是我不想在每个接口中都定义所有可能的子类型,因为它们与实现它们的类并不都相关
我本以为将选择扩展A实现或所有B实现接口,而不仅仅是清单中的第一个接口。
请有人解释,因为我在过去两天在线上所做的所有阅读都还没有为我解决。如果有人想打开讨论聊天,那就太好了!
谢谢。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = CatTopic.class, name = "CAT"),
@Type(value = DogTopic.class, name = "DOG"),
@Type(value = FishTopic.class, name = "FISH"),
@Type(value = LamaTopic.class, name = "LAMA")
})
public interface BaseInterface {}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = LamaTopic.class, name = "LAMA")
})
public interface AlpahInterface extends BaseInterface {}
// Something to extend A
public class B extends A implements AlpahInterface, BetaInterface, CharlieInterface {}
答案 0 :(得分:0)
我不清楚在JsonSubTypes的主要列表中应在何处读取此代码,但我设法解决了相关的发布问题。 最终在我的相关文章中找到了处理主要问题的方法。 public abstract @interface JsonTypeInfo
需要做的是对于JsonSubTypes中定义的每个类,还必须在该类上指定@JsonTypeName(“ ClassName”) 例如
@JsonTypeName("CAT")
public class CatTopic extends A implements AlpahInterface, BetaInterface, CharlieInterface {}