मैं जैक्सन में fail_on_empty_beans को कैसे अक्षम करूं?


99

जैकसन 2.1 का उपयोग करते हुए, मैं कैसे अक्षम कर सकता हूं fail_on_empty beansकि त्रुटि संदेश मुझे अक्षम करना चाहता है?

मैं यह मान रहा हूं कि यह दुनिया की सबसे सरल चीज है, लेकिन नरक में देर हो चुकी है और मैं एक साधारण ट्यूटोरियल या विशेष रूप से स्पष्ट कुछ भी नहीं खोज पा रहा हूं apiSerializationFactory? वे इसे इतना अचूक क्यों बनायेंगे और फिर त्रुटि संदेश को इतना सरल बना देंगे?

हालांकि मैं ऐसा त्रुटि संदेश की तरह, मेरा मतलब है, यह बेहतर एक एनपीई से है।

मैं मान रहा हूं कि एनोटेशन का उपयोग करने का एक तरीका है - लेकिन मैं उन सरल काम के लिए उनका उपयोग करने के लिए उत्सुक नहीं हूं जो मैं कर रहा हूं!

जवाबों:


124

आप प्रति वर्ग या विश्व स्तर पर ऐसा कर सकते हैं, मुझे विश्वास है।

प्रति वर्ग के लिए, @JsonSerialize को कक्षा की घोषणा से ऊपर आज़माएँ।

एक मैपर के लिए, यहाँ एक उदाहरण है:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// do various things, perhaps:
String someJsonString = mapper.writeValueAsString(someClassInstance);
SomeClass someClassInstance = mapper.readValue(someJsonString, SomeClass.class)

नीचे StackOverflow लिंक भी एक स्प्रिंग प्रोजेक्ट के लिए एक उदाहरण है।

जर्सी के साथ रीस्ट के लिए, मुझे अपने सिर के ऊपर से याद नहीं है, लेकिन मेरा मानना ​​है कि यह समान है।


मेरे द्वारा खोदे गए लिंक के कुछ जोड़े: (कोडहॉस बंद होने के कारण संपादित 1 लिंक)।


मैंने इसे पहले इस्तेमाल किया था, आज कुछ और जानकारी है, जैसे ऑटो खोज। stackoverflow.com/questions/4362104/…
पैनकेओ

1
क्या आप कक्षा घोषणा पर @JsonSerializeअक्षम करने के लिए उपयोग करने के बारे में एक उदाहरण दे सकते हैं FAIL_ON_EMPTY_BEANS?
tuk

2
कुछ साल हो गए :)। यह मदद कर सकता है: stackoverflow.com/questions/12162413/…
पैनकेओ

या आप "mapper.disable (SerializationFeature.FAIL_ON_EMPTY_BEANS)" जैसे ObjectMapper वर्ग की अक्षम विधि का उपयोग कर सकते हैं
Reddeiah Pidugu

43

यदि आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो आप application.properties फ़ाइल में निम्न गुण सेट कर सकते हैं। spring.jackson.serialization.FAIL_ON_EMPTY_BEANS = false


22

यदि आपकी कक्षा में कोई भी सार्वजनिक विधियाँ / प्रॉपर्टीज़ नहीं हैं, तो आप भी यही समस्या प्राप्त कर सकते हैं। मैंने आम तौर पर एपीआई अनुरोधों और प्रतिक्रियाओं के लिए डीटीओ को समर्पित किया है, सार्वजनिक घोषित किया है, लेकिन तरीकों को सार्वजनिक करने के लिए एक मामले में भूल गया - जिसने पहले स्थान पर "खाली" बीन का कारण बना।


13

आप शायद कक्षा @JsonIgnoreProperties(ignoreUnknown=true)में अनिर्धारित क्षेत्रों को अनदेखा करने के साथ वर्ग को भी एनोटेट कर सकते हैं


1
यह काम नहीं करेगा अगर पूरी सेम वास्तव में अशक्त है
maryoush

12

यदि आप बिना किसी अतिरिक्त फ़ील्ड के JSON ऑब्जेक्ट प्राप्त करना चाहते हैं - तो कृपया इस एनोटेशन को अपनी कक्षा में शामिल करें, इसने मेरे लिए एकदम सही काम किया।

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

आप इस पंक्ति में अपने एप्लिकेशन को भी जोड़ सकते हैं। प्रोपराइटीज़ फाइल कर सकते हैं, लेकिन यह आपके JSON में एक अतिरिक्त फ़ील्ड जोड़ देगा।

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

मैं अपने स्प्रिंग-बूट REST ऐप में अपने एक कंट्रोलर के अंदर से JSON को वापस करने की कोशिश कर रहा था और इसने मेरे लिए इसे ठीक कर दिया।
नन्जसेन

एकदम सही तरीका अगर आपके पास कोई खाली वस्तु है!
जॉर्जी पीव

3

यदि आप org.codehaus.jackson.map.ObjectMapper का उपयोग करते हैं, तो pls। निम्नलिखित पंक्तियों का उपयोग करें

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

2

जर्सी रेस्ट सर्विसेज में केवल जैक्सनफ़्रीट्स एनोटेशन का उपयोग करें ...

@JacksonFeatures(serializationDisable = {SerializationFeature.FAIL_ON_EMPTY_BEANS})
public Response getSomething() {
    Object entity = doSomething();
    return Response.ok(entity).build();
}

1

मेरे मामले में, मैं एक फ़ील्ड में @JsonProperty एनोटेशन लिखने से चूक गया, जो इस त्रुटि का कारण बन रहा था।


1

एक अलग समस्या के लिए यहां एक समाधान जोड़ना, लेकिन एक जो एक ही त्रुटि के साथ प्रकट होता है ... अपने स्ट्रिंग सदस्यों में शाब्दिक दोहरे उद्धरण से बचने के लिए मक्खी पर जेन्स का निर्माण करते समय (एपीआई प्रतिक्रियाओं या जो भी हो) ध्यान रखें। आप अपने खुद के विकृत जीन्स का उपभोग कर सकते हैं।


1

T o इस समस्या को ठीक करें अपने JsonDataFormat वर्ग को नीचे की तरह कॉन्फ़िगर करें

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

जो लगभग के बराबर है,

mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

0
ObjectMapper mapper = new ObjectMapper();

नमस्ते,

जब मैं उपयोग करता हूं mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

प्रतिक्रिया में मायाजाल पृष्ठ में मेरे json ऑब्जेक्ट वैल्यू आते हैं

केवल नीचे सेटिंग्स की मदद से हल किया गया

mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

0

मेरे मामले में मुझे इसे निष्क्रिय करने की आवश्यकता नहीं थी, बल्कि मुझे यह कोड अपनी कक्षा के शीर्ष पर रखना था: (और इससे मेरी समस्या हल हो गई)

    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)//this is what was added
    @Value //this was there already
    @Builder//this was there already

public class NameOfClass {
     //some code in here.
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.