मैं जैक्सन 1.6.4 और जावा जेडीके 6 का उपयोग कर रहा हूं 6.क्या एनोटेशन के बिना जैक्सन बिल्कुल सेटर्स की आवश्यकता है?
मैं जैक्सन एनोटेशन का उपयोग नहीं करना चाहता; मैं सेटर्स के बिना अपरिवर्तनीय जावा ऑब्जेक्ट्स रखना चाहता हूं।
दो आवश्यकताएं संघर्ष में दिखाई देती हैं।
यदि मैं निजी सेटर्स deserialization जोड़ता है ठीक काम करता है।
मैं अपने अपरिवर्तनीय वस्तुओं के लिए निजी सेटर्स का सहारा लेने की कोशिश नहीं कर रहा हूं - मैं इस तरह जिद्दी हूं।
मैं किसी भी क्षेत्र की पहुंच की अनुमति देने के लिए दृश्यता जांचकर्ता के कस्टम कार्यान्वयन की कोशिश करने की प्रक्रिया में हूं।
लेकिन अगर किसी के पास कुछ सलाह या सबक सीखे हैं तो वे साझा कर सकते हैं मैं उनकी सुनवाई की सराहना करता हूं।
अपडेट: यह काम कर रहा है।
बिल्डर पैटर्न, निजी कन्स्ट्रक्टर - एक ला ब्लोच "प्रभावी जावा"।
यह deserialization विन्यास और दृश्यता सेटिंग ले लिया, लेकिन अब यह जाना अच्छा है।
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
बिल्डर पैटर्न – duffymo
यदि आपने अपनी समस्या का समाधान किया है, तो कृपया नीचे दिए गए उत्तर के रूप में अपना समाधान पोस्ट करें, ताकि आपका प्रश्न अनुत्तरित न हो। –