2016-10-28 2 views
1

Как вы реализуете в Jackson преобразование из json-объектов Java на основе типов классов, указанных в json.Jacker deserialization: Custom Object factory

Пример Java Типы:

public class Car{ 
    public String make; 
    public String model; 
} 

public class Spoon { 
    public String material; 
} 

public class Ownership { 
    public List<Object> items; 
    public User owner; 
} 

Пример JSon:

{ 
    "items": [ 
     { 
      "@class": "com.example.Car", 
      "make": "Mercedes-Benz", 
      "model": "S500" 
     }, 
     { 
      "@class": "com.example.Spoon", 
      "material": "silver" 
     }    
    ], 
    "owner": { 
     "name": "John" 
    } 
} 

Так как число классов неизвестно (пользователи могут добавлять любой класс) не представляется возможным использовать аннотацию @JsonSubTypes.

Кроме того, json может содержать известные классы строго типов, такие как объект User в примере, который сериализуется с использованием стандартной реализации Jackson.

Большинство примеров, которые я могу найти, например, http://www.baeldung.com/jackson-inheritance, предполагают, что количество подклассов известно, но в моем случае это не так, пользователи рамки добавят свои собственные.

В идеале реализация будет просто разрешать типы и позволить Джексону выполнять оставшуюся часть сериализации без повторения этого кода.

ответ

1

Может быть решена с помощью аннотаций на коллекции:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, 
       include = JsonTypeInfo.As.PROPERTY, 
       property = "@class") 
public List<Object> items; 
Смежные вопросы