我对班级结构有如下建议:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.PROPERTY,PROPERTY=“type”)
@JsonSubTypes({
@JsonSubTypes.Type(name = "testA", value = TestA.class),
@JsonSubTypes.Type(name = "testB", value = TestB.class),
@JsonSubTypes.Type(name = "testC", value = TestC.class)
})
public abstract class Test {
}
public class TestA extends Test {
private String firstName;
private String secondName;
private String surName;
}
public class TestB extends Test {
private String adressLine1;
private String adressLine2;
private String adressLine3;
}
public class TestC extends Test {
private String hobby1;
private String hobby2;
private String hobby3;
}
上面的类被序列化为json元素数组,但是当我反序列化它们时,我想要如下结构:
公共阶层结构{
private TestA testA;
private TestB testB;
private TestC testC;
public void setTestA(TestA testA){
this.testA = testA;
}
public TestA getTestA(){
return testA;
}
.....getter and setter for testB and testC...
}
是否可以将testA、testB和testC类型的元素数组转换为FlatStructure类的属性?
您可以添加带有注释@JsonCreator的构造函数
,在每堂课的测试中
和另一个在你的平面结构类中,之后你使用一个ObjectMapper来创建你的类平面结构
我建议在构造函数上也使用annotations@JsonProperty
查看此链接
http://buraktas.com/convert-objects-to-from-json-by-jackson-example/
我认为那个
public class TestA extends Test {
.....
@JsonCreator
public TestA(@JsonProperty("firstName") String name,
@JsonProperty("secondName") String secondeName,
@JsonProperty("surName") String surName){
this.firstName=name;
this.secondeName=secondeName;
this.surName=surName;
}
... getter, setter .....
}
public class TestB extends Test {
.....
@JsonCreator
public TestB(@JsonProperty("adressLine1") String adressLine1,
@JsonProperty("adressLine2") String adressLine2,
@JsonProperty("adressLine3") String adressLine3){
this.adressLine1=adressLine1;
this.adressLine2=adressLine2;
this.adressLine3=adressLine3;
}
... getter, setter .....
}
public class TestC extends Test {
.....
@JsonCreator
public TestC(@JsonProperty("hobby1") String hobby1,
@JsonProperty("hobby2") String hobby2,
@JsonProperty("hobby3") String hobby3){
this.hobby1=hobby1;
this.hobby2=hobby2;
this.hobby3=hobby3;
}
... getter, setter .....
}
public class FlatStructure{
private TestA testA;
private TestB testB;
private TestC testC;
@JsonCreator
public FlatStructure(@JsonProperty("testA") testA testa,
@JsonProperty("testB") testB testb,
@JsonProperty("testC") testC testc){
this.testA =testa;
this.testB =testb;
this.testC =testc;
}
... getter, setter .....
}
应该可以与地图绘制程序正常工作
编辑:
使用Jackson自定义JSON反序列化
http://www.baeldung.com/jackson-deserialization
我需要反序列化以下json: 将它的< code>id属性设置为< code>foo_id json属性。 我需要在自定义反序列化程序中执行此操作。实现这一点最简单的方法是什么? 我想以某种方式将json“转换”为 然后将此委托给杰克逊。 在本例中,对象的类型为Foo,但其他对象可能不属于此类。另外,在本例中,json是一个数字,但如果它也是一个字符串,我希望支持。所以,我需要一种通用的方法来做到
我有以下JSON文件要反序列化
问题内容: 支持deserialising“所有支持类型的数组”,但我不能找出确切的语法这一点。 对于单个对象,我可以这样做: 现在,对于数组,我想这样做: 有人知道是否有不可思议的命令吗?如果没有,那么解决方案是什么? 问题答案: 首先创建一个映射器: 作为数组: 作为列表: 指定列表类型的另一种方法:
鉴于这种反应: 我怎样才能将数据属性反序列化为像这样的 MapDTO 我已经尝试使用自定义反序列化器,但是按名称获取所有属性,然后基于这些属性和嵌套对象创建一个新的MapDTO对象看起来很麻烦。如果结构发生变化,我必须更改反序列化器和DTO本身。让Jackson从给定的根开始进行反序列化会更容易。我使用Jackson 2.12.4到ResAs的4.4.0。我想避免创建不必要的包装类。
但它返回一个id为空且产品为空的对象。当然,我不需要为这个简单的操作编写自定义的吗?
给定一个JSON对象,它具有可变属性(例如标签),可以是原始值(例如字符串)或对象。假设的用例可以是标签多元化翻译的包装器: 或者 目标是使Jackson反序列化始终在Java端返回固定结构。因此,如果给定原语值,它总是转换为目标POJO的某个属性(例如其他),即: 目前,该问题通过使用自定义来解决,它检查属性是否为原语: 是否有一种更优雅的方法来处理可变JSON属性,而不需要在节点级别操作的解码