我正在使用Jackson 1.6.4和Java JDK 6.沒有註釋的傑克遜絕對需要安裝者嗎?
我不想使用Jackson註釋;我想在沒有setter的情況下擁有不可變的Java對象。
這兩個要求似乎有衝突。
如果我添加私人setter反序列化工作正常。
我試圖不求助於我的不可變對象的私人setter - 我固執的那種方式。
我正在嘗試自定義實現VisibilityChecker以允許任何字段訪問。
但是,如果任何人有一些建議或經驗教訓,他們可以分享我會很高興聽到他們。
更新:它的工作。
構建模式,私人構造函數 - 拉布洛赫「有效的Java」。
它設置了反序列化配置和可見性,但現在很好。
public class JsonMapper
{
private static final int INITIAL_SIZE = 2048;
/** See http://wiki.fasterxml.com/JacksonBestPracticeThreadSafety?highlight=(\bCategoryJackson\b) */
private static ObjectMapper mapper;
static
{
mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
SerializationConfig serializationConfig = mapper.getSerializationConfig();
serializationConfig.setDateFormat(Person.DEFAULT_FORMATTER);
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
deserializationConfig.setDateFormat(Person.DEFAULT_FORMATTER);
deserializationConfig.enable(DeserializationConfig.Feature.AUTO_DETECT_FIELDS);
mapper.setVisibilityChecker(VisibilityChecker.Std.defaultInstance().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
}
public static <T> String serialize(T o) throws IOException
{
StringWriter sw = new StringWriter(INITIAL_SIZE);
mapper.writeValue(sw, o);
return sw.toString();
}
public static <T> T deserialize(String source, Class<T> targetClass) throws IOException
{
ByteArrayInputStream stream = new ByteArrayInputStream(source.getBytes());
TreeTraversingParser treeTraversingParser = new TreeTraversingParser(mapper.readTree(stream));
treeTraversingParser.setCodec(mapper);
return treeTraversingParser.readValueAs(targetClass);
}
}
如果你的課是不可改變的,傑克遜應該如何填充它們? – skaffman 2011-01-27 22:49:44
建設者模式 – duffymo 2011-01-28 00:37:20