Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JsonSubTypes应该从哪里读取?_Java_Json_Validation_Jackson_Polymorphism - Fatal编程技术网

Java JsonSubTypes应该从哪里读取?

Java JsonSubTypes应该从哪里读取?,java,json,validation,jackson,polymorphism,Java,Json,Validation,Jackson,Polymorphism,这个问题是对我发布的另一个问题的补充,因为我正在寻找关于JsonSubTypes的序列化/验证如何工作的清晰性 其他问题: 假设我有一个基类a 实现基本接口 如果我有一个子类B,它扩展了a,但实现了自己的接口,如alpainterface、BetaInterface、CharlieInterface。这就是验证失败的原因,因为AlphaInterface只列出了例如LAMA,因此验证不知道基本BaseInterface中定义的所有其他类型 子类B只实现AlphaInterface定义的任何内容,

这个问题是对我发布的另一个问题的补充,因为我正在寻找关于JsonSubTypes的序列化/验证如何工作的清晰性

其他问题:

假设我有一个基类a

实现基本接口

如果我有一个子类B,它扩展了a,但实现了自己的接口,如alpainterface、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 {}

我不清楚这段代码应该在JsonSubTypes的主列表中读到哪里,但我设法克服了相关的发布问题。 终于在我的相关帖子中找到了处理主要问题的方法。

需要做的是针对JsonSubTypes中定义的每个类,您还必须在该类@JsonTypeName(“ClassName”)上指定 e、 g


使用AlphaInterface的代码,如果我将JsonTypeInfo.Id.NAME更改为JsonTypeInfo.Id.MINIMAL_类,它就能够进行验证。有人能给我指一些关于理解杰克逊的东西的好文件吗?我正在寻找示例,但前提是您已经理解了它,而我想了解功能的详细信息。感谢MINIMAL_类,我创建了新项目,但打破了旧项目。我还在想办法解决这个问题。我们有三个人在解决这个问题,我们唯一能达成一致的是,无论是谁,无论是谁,以我们在网上找不到的方式实现了我们的代码。我们被难住了。不想改变代码库,因为我们有一个全新的代码版本,这将被淘汰,这样做需要重新编码300多个文件,谁知道它可能会有什么其他影响。啊
@JsonTypeName("CAT")
public class CatTopic extends A implements AlpahInterface, BetaInterface, CharlieInterface {}