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
時也有效。