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"
}]
}
我想实现一个功能,其中请求映射到正确的对象。是否有一种方法(除了自定义反序列化器)可以将请求按类型/基数映射到适当的对象?任何见解都将不胜感激!
Jackson通过@JsonTypeInfo注释支持这一点。
我建议在属性(一个json字段)中指定类型信息,并使用完整的类名(而不是短名称)来提供更好的唯一性保证:
@jsonTypeInfo(include=jsonTypeInfo.as.property,use=jsonTypeInfo.id.class,property=“jsonType”)公共类PatientObjectA{..
输出A看起来像:“patient”:{“jsontype”:“com.company.patientaobject”“identifier”:{“type”:{“coding”:{“system”:“na”,“code”:“patient”},“tode”:“patient”}:{“type”:{“system”:“na”,“code”:“patient”},“value”:“000000000”}}
输出B看起来像:“patient”:{“jsontype”:“/代码>
注意:另外,请查看@jsonrootname,因为它将使您能够创建一个“有根的”json对象,而不必使用包装器对象。
@jsonrootname(“patient”)@jsonTypeInfo(include=jsonTypeInfo.as.property,use=jsonTypeInfo.id.class,property=“jsonType”)公共类PatientObjectA{..
...还有...
@jsonrootname(“patient”)@jsonTypeInfo(include=jsonTypeInfo.as.property,use=jsonTypeInfo.id.class,property=“jsonType”)公共类PatientObjectB{..
协助更多研究的相关术语:
JSON中的- 多态性
- xml名称空间的JSON等效项。
我有一个REST API,它返回JSON响应为: 有时它会返回: 我有一个这样的POJO: 那么,有没有办法(除了编写自己的自定义反序列化程序)在 Jackson2 中帮助我将 JSON 中的通道映射到字符串类型(当它是时)和类型(当它是 JSON 对象时)? 或者换句话说,Jackson中是否有一种方法可以通过变量的映射,而不仅仅是通过?
问题内容: 我有一个REST API,它返回JSON响应为: 有时它返回: 我有一个像这样的POJO: 那么,有没有一种方法(不是写你自己的其他 自定义解串器 中)Jackson2,这将有助于我映射在JSON来时,它的A型和类型时,它是一个JSON对象? 或者换句话说,在Jackson中,有没有一种方法可以按变量而不是by 映射? 问题答案: 我可以建议您像这样使用JsonNode: 或像这样 :
我试图反序列化2种不同类型的列表,包括它们的派生类 为了更好地解释它,我做了下面的例子 我有2个系统: API系统 与下列实体合作: 应用系统 使用以下DTO 使用此示例,API系统返回一个
序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。
问题内容: 我有一个Web服务的结果,该结果返回布尔值或单例映射,例如 布尔结果: 地图结果: 单独地,我可以轻松地映射这两个位置,但是我该如何做呢? 基本上我想将其映射到一个类: 所有所有多态示例都用于基于数据中的属性进行映射,但是在这种情况下,我没有该选项。 编辑 代码的更新部分: 问题答案: 不不不。您不必编写自定义解串器。只需先使用“无类型”映射: 给出“定级” 价值或“定级”价值(采用第
我之前的问题没有得到任何结果,可能是我问得不对,或者太详细了。 现在我的基本问题是,如何将一个具有一个类名的JSON对象反序列化为一个具有不同类名的Java对象? 例如,服务器发送/期望的JSON类是“18”(我对此控制为零)。我的Java班不可能是“18”,所以是“_18”。 简单地执行new Gson().fromjson()没有任何帮助,即使使用了不同的命名策略;_18对象始终为NULL。从