2015-09-12 92 views
4

我試圖使用jackson將json解序列化爲枚舉。如果工廠方法只有一個參數,它可以正常工作。只要我們添加更多的參數,它就停止工作。使用工廠方法反序列化@JsonCreator的枚舉

這裏是我試過的代碼示例。

public enum Test { 
    FIRST(1, "first"); 

    private final int intProp; 
    private final String stringProp; 

    Test(int i, String stringProp) { 
     this.stringProp = stringProp; 
     this.intProp = i; 
    } 

    private static final Map<String, Test> allEntries = new HashMap<>(Test.values().length); 
    static { 
     for(Test each : Test.values()){ 
      allEntries.put(getCode(each.intProp, each.stringProp), each); 
     } 
    } 

    private static String getCode(int i, String s){ 
     return s + i; 
    } 

    @JsonCreator(mode = Mode.PROPERTIES) 
    public static Test forValues(@JsonProperty("intProp") int intProp, 
           @JsonProperty("stringProp") String stringProp 
           ){ 
     return allEntries.get(getCode(intProp,stringProp)); 
    } 
} 

使用下面的代碼反序列化JSON的

String json = "{\"intProp\":1,\"stringProp\":\"first\"}"; 
ObjectMapper mapper = new ObjectMapper(); 

Test enumValue = mapper.readValue(json, Test.class); //fails 

這是我得到

com.fasterxml.jackson.databind.JsonMappingException: Unsuitable method 

版本除外:傑克遜 - 數據綁定2.5.1,傑克遜的註解2.5.0

我不想編寫自定義的反序列化器,在我的方法中是否存在錯誤或該選項只是不受傑克遜支持?

同樣的事情在使用class而不是enum時也有效。

回答

1

看起來這個功能實際上是在傑克遜庫中丟失的。我在jackson-databind github project中打開了一個問題。將不得不等待他們在即將發佈的版本中修復它。