java 子类的命名_java – 使用Jackson ObjectMapper将子类名称序列化为JSON,而不是超类...

在将对象序列化为

JSON的以下杰克逊/ Java代码中,我得到以下结果:

{"animal":{"x":"x"}}

但是,我实际想要得到的是:

{"dog":{"x":"x"}}

有什么我可以做的动物容器,以便我得到的对象的运行时类型(“狗”,“猫”),而不是“动物”)? (编辑:我知道地图名称来自getter和setter-方法名称.)我可以想到的唯一方法是在AnimalContainer中具有每种类型的Animal的属性,具有setter和getter所有这些,并强制一次只有一个是重视的.但是,这违背了动物超类的目的,只是似乎错了.在我的真实代码中,我实际上有十几个子类,而不仅仅是“狗”和“猫”.有没有更好的方式来做(可能使用注释不知何故)?我需要一个反序列化解决方案.

public class Test

{

public static void main(String[] args) throws Exception

{

AnimalContainer animalContainer = new AnimalContainer();

animalContainer.setAnimal(new Dog());

StringWriter sw = new StringWriter(); // serialize

ObjectMapper mapper = new ObjectMapper();

MappingJsonFactory jsonFactory = new MappingJsonFactory();

JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(sw);

mapper.writeValue(jsonGenerator,animalContainer);

sw.close();

System.out.println(sw.getBuffer().toString());

}

public static class AnimalContainer

{

private Animal animal;

public Animal getAnimal() {return animal;}

public void setAnimal(Animal animal) {this.animal = animal;}

}

public abstract static class Animal

{

String x = "x";

public String getX() {return x;}

}

public static class Dog extends Animal {}

public static class Cat extends Animal {}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值