私は次のクラスを持っています:
public class Some implements Map<String, Object>{
private Map<String, Object> innerMap;
//implementation that can only set innerMap in constructor and cannot add or remove values
}
問題は、jackson でこれを正しくデシリアライズできないことです。デフォルトの入力なしでシリアライズすると、{"one":"two"} としてシリアライズされ、正しくデシリアライズされるため、問題ありません (デシリアライザーを次のように実装する必要がありました)。
return new Some(jp.readValueAs(new TypeReference<HashMap<String,Object>>(){}));
デフォルトの入力をオンにして使用すると、これは次のようにシリアル化されます
["com.class.Some",{"one":"two"}]
しかし、逆シリアル化は投げています
com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.util.HashMap
何かご意見は?