Моя цель - десериализовать следующий json в правильный подкласс на основе поля типа в атрибутах:
{
"totalSize": 1,
"done": true,
"records": [
{
"attributes": {
"type": "Custom_Object__c",
"url": "\/services\/data\/v44.0\/sobjects\/Custom_Object__c\/a00Y000000fM1CzUFZ"
},
"Name": "Name Test",
"Price_Out__c": false,
"Description__c": "This is a sample description!",
"Ticket_Number__c": "AM-12345"
}
]
}
Мой класс верхнего уровня - QueryResult.java:
public class QueryResult {
private String totalSize;
private Boolean done;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Custom_Object__c.class, name = "Custom_Object__c")
})
private List<Records> records = new ArrayList<>();
public String getTotalSize() {
return totalSize;
}
public void setTotalSize(String totalSize) {
this.totalSize = totalSize;
}
public Boolean getDone() {
return done;
}
public void setDone(Boolean done) {
this.done = done;
}
public List<Records> getRecords() {
return records;
}
public void setRecords(List<Records> records) {
this.records = records;
}
}
Recordss.java:
public abstract class Records {
private Attributes attributes;
public Attributes getAttributes() {
return attributes;
}
public void setAttributes(Attributes attributes) {
this.attributes = attributes;
}
}
CustomObject.java:
public class ManagedOrg extends Records {
private String Name;
private String Price_Out__c;
private String Description__c;
private String Ticket_Number__c;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getPrice_Out__c() {
return Price_Out__c;
}
public void setPrice_Out__c(String price_Out__c) {
Price_Out__c = price_Out__c;
}
public String getDescription__c() {
return Description__c;
}
public void setDescription__c(String description__c) {
Description__c = description__c;
}
public String getTicket_Number__c() {
return Ticket_Number__c;
}
public void setTicket_Number__c(String ticket_Number__c) {
ticket_Number__c = Ticket_Number__c;
}
}
Я не могу заставить это работать.Свойство идентификации вкладывается в список записей:
"records": [
{
"attributes": {
"type": "Custom_Object__c",
Возможно ли, чтобы Джексон использовал это значение в качестве JsonTypeId?Я думал, что мои вышеупомянутые аннотации решат это, но я получаю сообщение об ошибке, в котором говорится, что мне не хватает свойства type для класса Records.Это потому, что свойство type находится внутри самого класса Records?