我目前正在尝试使用能够处理多态性的杰克逊(Jackson)实现反序列化器,也就是说,给定这两个类:

public abstract class Animal {

private String name;

private float weight;

@JsonCreator

protected Animal(@JsonProperty(value="name") String name, @JsonProperty(value="weight",required=true) int weight) {

this.name=name;

this.weight=weight;

}

}

public class Dog extends Animal {

private int barkVolume;

@JsonCreator

public Dog(String name,int weight, @JsonProperty(value="barkVolume",required=true) int barkVolume) {

super(name, weight);

this.barkVolume=barkVolume;

}

}

解串器应该能够从json字符串中推断并实例化适当的子类。

我使用了一个自定义的反序列化器模块,UniquePropertyPolymorphicDeserializer(来自https://gist.github.com/robinhowlett/ce45e575197060b8392d )。 该模块的配置如下:

UniquePropertyPolymorphicDeserializer deserializer =

new UniquePropertyPolymorphicDeserializer(Animal.class);

deserializer.register("barkVolume", Dog.class);

SimpleModule module = new SimpleModule("UniquePropertyPolymorphicDeserializer");

module.addDeserializer(Animal.class, deserializer);

mapper.registerModule(module);

该模块向用户询问Animal的每个子类的唯一属性。 因此,当解串器找到具有barkVolume属性的json字符串时,它知道应该实例化Dog。

但是,我对json属性的规范存在疑问,因为子类不能从父类中给定的属性继承。 在Dog类中,我必须再次指定“ name”和“ weight”是json属性,即使在Animal类中已经指定了这些属性:

public Dog(@JsonProperty(value="name") String name, @JsonProperty(value="weight",required=true) int weight, @JsonProperty(value="barkVolume",required=true) int barkVolume) {

super(name, weight);

this.barkVolume=barkVolume;

}

否则,解串器将产生错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Invalid type definition for type `Animals.Dog`: Argument #0 has no property name, is not Injectable: can not use as Creator [constructor for Animals.Dog, annotations: {interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}]

at [Source: UNKNOWN; line: -1, column: -1]

这个解决方案对我来说并不令人满意:

每次我们要创建Animal的新子类时,都必须在此类中指定name和weight为json属性。

这很棘手,例如在Animal类中,weight属性被标记为必需,而在子类中,我们可以定义weight不是必需属性。

您是否知道一种从父类的属性“继承”的方法,以避免每次在子类中指定对应的json属性?

最好的祝福,

马蒂厄

Java继承属性后内存,java - Jackson:继承和必需的属性 - 堆栈内存溢出相关推荐

  1. java内存溢出让tomcat停止_java - 使用JVM Open J9一段时间后,应用程序(tomcat)停止响应 - 堆栈内存溢出...

    我正在使用Open J9,一段时间后我的应用程序停止响应..在生产中发生了2个小时后,在本地设法使用JMeter进行模拟. 应用程序(tomcat)只是停止响应,我需要重新启动才能将其取回. 问题是日 ...

  2. java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

    目前,MapStruct不支持具有多个源属性的映射方法. 但是,在您的情况下,您可以使用1.2.0中的@Context . 根据我的理解, projId和code就像映射的帮助器一样,它们不用于映射目 ...

  3. pdfbox java.lang.outofmemoryerror_java - PDFBox 2.0.1挂起渲染pdf页面 - 堆栈内存溢出

    可以在Java 8 VM中重现该问题. 正如@Tilman在他的回答中已经提到的,这是Java 8使用与以前的Java版本不同的颜色管理系统引入的一个问题. 通过使用新的色彩管理系统分析VM行为,可以 ...

  4. flyingsaucer转换多个html,java - 使用FlyingSaucer将包含阿拉伯字符的HTML页面转换为PDF - 堆栈内存溢出...

    我想使用FlyingSaucer将包含阿拉伯字符的HTML页面转换为PDF文件,但生成的PDF不包含组合字符并向后打印输出. HTML: جميع الحقوق Java摘录: String inpu ...

  5. java自带的unpack闪退,java - 使用requiresUnpack无法正常使用Maven构建的Spring Boot JAR - 堆栈内存溢出...

    我的POM看起来像这样: xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ ...

  6. java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出

    将图像从16位减少到8位. 假设您有一个byte []变量plane16,在其中您有图像的所有像素. 注意 :我的byte [] plane16从16位图像获取数据,但是byte为8bit = 1by ...

  7. java算球体积的代码_java - 球体体积法不起作用 - 堆栈内存溢出

    为了使球体体积法起作用,我尝试了许多不同的计算方法. 我的Sphere类是从Circle扩展的,以从圆中获取面积,并实现了Shape3D接口,该接口允许我使用体积方法. 但是,我已经为我的方法尝试了所 ...

  8. java pdf 用系统字体大小_java - Java PDFBox设置PDF表单中几个字段的自定义字体 - 堆栈内存溢出...

    使用穷人的大胆 我如何大胆的领域? ......我需要设置哪些大胆的字段? 在PDF中,您通常使用带粗体字形的字体使文本变为粗体,另请参阅第二个问题. 如果你手上没有这么大胆的字体,你可能会使用一些穷 ...

  9. win7计算机属性后没反应,win7系统计算机右键查看属性时没有反应的应对方案

    win7系统计算机右键查看属性时没有反应的应对方案 更新时间:2016-07-13 14:29:48 阅读:200 作者:win7旗舰版系统下载 当用户查看Win7系统属性时,直接右键"计算 ...

  10. PHP数组json占用内存,php - 从json“连接”多个数组 - 堆栈内存溢出

    我想用json-array中的文本替换我从json-array接收的数据,将其写入表中(我使用datatables). 第一个数据集来自这里 ,第二个数据集来自这里 这是我到目前为止的源代码: $ch ...

最新文章

  1. oracle命令导入表
  2. nero 8.0刻录系统光盘
  3. 编写程序,输入某年某月,求该月有多少天
  4. python--lambda和def函数
  5. leetcode算法题--二叉搜索树的最近公共祖先
  6. 153. Find Minimum in Rotated Sorted Array
  7. 用固定收敛标准特征迭代次数法实现分类是不是一个巧合?
  8. 天翼云从业认证(1.1)服务器的分类、用途、特点、结构和组件
  9. [html] 编写一个布局,让文字环绕在图片的周围
  10. php遍历原理,PHP数组遍历与实现原理
  11. css中关于transform、transition、animate的区别
  12. 换工作,看机会的,戳进来!
  13. 海康威视摄像头使用:iVMS-4200 VS客户端
  14. Setup Factory安装及程序安装包制作教程
  15. 希尔密码(原理+代码)
  16. NoteExpress文献题录如何导出到excel
  17. 电话簿简单实现(JAVA,带图形界面文件读取)
  18. 2016款MACBOOK PRO触控条版 安装WIN10初体验 及 无奈退货记
  19. 【新知实验室】-多人视频会议体验
  20. js找出两个数组中的重复项

热门文章

  1. YHLMR009 交货单查询
  2. php 生成网页固定头,如何去除KingCMS PHP版头部自动生成的generator信息
  3. 加息减税后,定期存款何时转存划算
  4. 2016年上半年上午系统集成项目管理工程师考试试题
  5. 哈工大威海计算机科学与技术好不好,哈尔滨工业大学威海校区和西电比哪个计算机专业好...
  6. 基于STM32实现孤立词语音识别系统
  7. Windows Server 2022 Install Veeam Backup 12
  8. 如何使用Doctl,DigitalOcean官方命令行客户端
  9. Spring Security Oauth2 token 续期
  10. 十进制转BCD码的方法