Java Jackson反序列化同名但不同类类型的对象
我有一些POJO,它们在RESTAPI中用作请求和响应对象(我知道duplicate@JsonProperty在语法上不正确,请参见下文): 或者在这种情况下(注意标识符对象的基数不同,在这种情况下标识符可以有一个或多个项)(请求类中的PatientObject):Java Jackson反序列化同名但不同类类型的对象,java,serialization,jackson,deserialization,jackson2,Java,Serialization,Jackson,Deserialization,Jackson2,我有一些POJO,它们在RESTAPI中用作请求和响应对象(我知道duplicate@JsonProperty在语法上不正确,请参见下文): 或者在这种情况下(注意标识符对象的基数不同,在这种情况下标识符可以有一个或多个项)(请求类中的PatientObject): 我想实现一个功能,将请求映射到正确的对象。是否有一种方法(自定义反序列化程序除外)可以按类型/基数将请求映射到适当的对象?如有任何见解,将不胜感激 Jackson通过@JsonTypeInfo注释支持这一点 我建议在属性(json字
我想实现一个功能,将请求映射到正确的对象。是否有一种方法(自定义反序列化程序除外)可以按类型/基数将请求映射到适当的对象?如有任何见解,将不胜感激 Jackson通过@JsonTypeInfo注释支持这一点 我建议在属性(json字段)中指定类型信息,并使用完整的类名(而不是短名称),以更好地保证唯一性:
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类项目{
..
输出A如下所示:
“病人”:{
“jsonType”:“com.company.patientObject”
“标识符”:{
“类型”:{
“编码”:{
“系统”:“NA”,
“代码”:“患者”
},
“文本”:“患者”
},
“系统”:“患者”,
“值”:“000000000”
}
}
输出B看起来像:
“病人”:{
“jsonType”:“com.company.patientObject”
“标识符”:{
“类型”:{
“编码”:{
“系统”:“NA”,
“代码”:“患者”
},
“文本”:“患者”
},
“系统”:“患者”,
“值”:“000000000”
}
}
注意:另外,请查看@JsonRootName,因为它将使您能够创建一个“根”json对象,而不必拥有您拥有的包装器对象
@JsonRootName(“患者”)
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类项目{
..
…和
@JsonRootName(“患者”)
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类对象B{
..
协助更多研究的相关术语:
- json中的多态性
- json等价于xml名称空间
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类项目{
..
输出A如下所示:
“病人”:{
“jsonType”:“com.company.patientObject”
“标识符”:{
“类型”:{
“编码”:{
“系统”:“NA”,
“代码”:“患者”
},
“文本”:“患者”
},
“系统”:“患者”,
“值”:“000000000”
}
}
输出B看起来像:
“病人”:{
“jsonType”:“com.company.patientObject”
“标识符”:{
“类型”:{
“编码”:{
“系统”:“NA”,
“代码”:“患者”
},
“文本”:“患者”
},
“系统”:“患者”,
“值”:“000000000”
}
}
注意:另外,请查看@JsonRootName,因为它将使您能够创建一个“根”json对象,而不必拥有您拥有的包装器对象
@JsonRootName(“患者”)
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类项目{
..
…和
@JsonRootName(“患者”)
@JsonTypeInfo(include=JsonTypeInfo.As.PROPERTY,use=JsonTypeInfo.Id.CLASS,PROPERTY=“jsonType”)
公共类对象B{
..
协助更多研究的相关术语:
- json中的多态性
- json等价于xml名称空间
public class Request {
@JsonProperty("patient")
PatientObjectA patientA;
@JsonProperty("patient")
PatientObjectB patientB;
}
public class PatientObjectA {
@JsonProperty("identifier")
Private Identifier identifier
@JsonProperty("system")
Private String system;
@JsonProperty("value")
Private String value;
}
public class PatientObjectA {
@JsonProperty("identifier")
Private List<Identifier> identifier
@JsonProperty("system")
Private String system;
@JsonProperty("value")
Private String value;
}
"patient": {
"identifier": {
"type": {
"coding": {
"system": "NA",
"code": "Patient"
},
"text": "Patient"
},
"system": "Patient",
"value": "000000000"
}
}
"patient": {
"identifier": [{
"type": {
"coding": {
"system": "NA",
"code": "Patient"
},
"text": "Patient"
},
"system": "Patient",
"value": "3018572032"
}]
}