2013-03-26 43 views
1

我試圖將json反序列化爲抽象類型時出現錯誤。傑克遜多態反序列化字段錯誤

代碼:

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class") 
public abstract class Animal 
{ 
} 

public class Dog extends Animal 
{ 
} 

public class Zoo 
{ 
    Animal a; 
} 

@RequestMapping(value = "/zoos", method = RequestMethod.POST) 
public void create(@RequestBody Zoo zoo) 
{ 
    ... 
} 

當我發佈以下JSON到動物園:

{ 
    "@class": "com.example.Dog", 
    "a": {} 
} 

我得到的錯誤: org.codehaus.jackson.map.exc.UnrecognizedPropertyException:無法識別字段「@class」(Class com.example.Zoo),未標記爲可忽略

我在做什麼錯?

回答

0

好吧,我是個白癡:

JSON的應該是:

{ 
    "a": { 
     "@class": "com.example.Dog" 
    } 
} 

因爲@class屬於類型的動物。

+1

FWIW,我認爲有一個新的配置將類型元素外部化到JSON中與目標對象相同的嵌套級別。換句話說,它將類型元素移動到目標對象的外部。 – 2013-03-26 21:00:47