Джексон поддерживает это с помощью аннотации @JsonTypeInfo.
Я рекомендую указать информацию о типе в свойстве (поле json) и использовать полное имя класса (в отличие от короткого имени), чтобы обеспечить лучшую гарантию уникальности:
@JsonTypeInfo(include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.CLASS, property = "jsonType")
public class PatientObjectA {
..
Выход A выглядит так:
"patient": {
"jsonType": "com.company.PatientAObject"
"identifier": {
"type": {
"coding": {
"system": "NA",
"code": "Patient"
},
"text": "Patient"
},
"system": "Patient",
"value": "000000000"
}
}
Выход B выглядит так:
"patient": {
"jsonType": "com.company.PatientBObject"
"identifier": {
"type": {
"coding": {
"system": "NA",
"code": "Patient"
},
"text": "Patient"
},
"system": "Patient",
"value": "000000000"
}
}
Примечание: Кроме того, проверьте @JsonRootName, поскольку это даст вам возможность создавать «укорененный» объект json без необходимости иметь тот объект-обертку, который у вас есть.
@JsonRootName("Patient")
@JsonTypeInfo(include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.CLASS, property = "jsonType")
public class PatientObjectA {
..
.. и ..
@JsonRootName("Patient")
@JsonTypeInfo(include = JsonTypeInfo.As.PROPERTY, use = JsonTypeInfo.Id.CLASS, property = "jsonType")
public class PatientObjectB {
..
Связанные термины, чтобы помочь с дополнительными исследованиями:
- полиморфизм в JSON
- json эквивалент пространств имен xml.