java - अगर जैकसन को सीरियलाइजेशन के दौरान एक फ़ील्ड को अनदेखा करने के लिए कहें तो इसका मूल्य शून्य है?


जैक्सन को सीरियलाइजेशन के दौरान फ़ील्ड वैल्यू को अनदेखा करने के लिए कॉन्फ़िगर किया जा सकता है, यदि वह फ़ील्ड का मूल्य रिक्त है

उदाहरण के लिए:

public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}


Answers


शून्य मानों के साथ serializing गुणों को दबाने के लिए, आप @JsonInclude सीधे कॉन्फ़िगर कर सकते हैं , या @JsonInclude इन- @JsonInclude एनोटेशन का उपयोग कर सकते हैं:

mapper.setSerializationInclusion(Include.NON_NULL);

या:

@JsonInclude(Include.NON_NULL)
class Foo
{
  String bar;
}

वैकल्पिक रूप से, आप एक @JsonInclude में @JsonInclude का उपयोग कर सकते हैं, ताकि विशेषता को दिखाया जाएगा यदि मूल्य शून्य नहीं है।

एक अधिक संपूर्ण उदाहरण मेरे जवाब में उपलब्ध है कि कैसे जैक्सन के माध्यम से सीरियल किए जाने से बीन के अंदर मैप और नल फ़ील्ड के भीतर शून्य मानों को रोकने के लिए




जैक्सन के साथ> 1.9.11 और <2.x का उपयोग करें @JsonSerialize एनोटेशन ऐसा करने के लिए:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)




बस दूसरे उत्तरों पर विस्तार करने के लिए - यदि आपको प्रति फ़ील्ड आधार पर शून्य मानों को छोड़ने पर नियंत्रण की आवश्यकता है, तो प्रश्न में फ़ील्ड टिप्पणी करें (या वैकल्पिक रूप से क्षेत्र के 'प्राप्तकर्ता' को एनोटेट करें)

उदाहरण - यहां केवल fieldOne json से अगर इसे रिक्त है तो fieldOne जाएगा। fieldTwo हमेशा इसमें शामिल किए बिना शामिल किए जाएंगे यदि यह रिक्त है

public class Foo {

    @JsonInclude(JsonInclude.Include.NON_NULL) 
    private String fieldOne;

    private String fieldTwo;
}

क्लास में सभी रिक्त मानों को डिफ़ॉल्ट के रूप में छोड़ने के लिए, कक्षा को एनोटेट करें। यदि आवश्यक हो तो प्रति फ़ील्ड / गेटर एनोटेशंस का उपयोग इस डिफ़ॉल्ट को ओवरराइड करने के लिए भी किया जा सकता है।

उदाहरण - यहां fieldOne और fieldTwo से fieldTwo कर fieldTwo जाएंगे यदि वे रिक्त क्रमशः हैं, क्योंकि यह क्लास एनोटेशन द्वारा तयशुदा सेट है। fieldThree हालांकि डिफ़ॉल्ट पर ओवरराइड होगा और हमेशा मैदान में टिप्पणी के कारण, शामिल किए जाएंगे।

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {

    private String fieldOne;

    private String fieldTwo;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String fieldThree;
}

जैक्सन का उपयोग करने के लिए अद्यतन 2 - जैक्सन के उपयोग के पुराने संस्करणों के लिए

@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS) 

के बजाय

@JsonInclude(JsonInclude.Include.NON_NULL)

यदि यह अद्यतन उपयोगी है, तो कृपया नीचे दिए गए ZiglioUK के उत्तर को ऊपर उठाएं, यह इस अद्यतन से पहले इस नए एनोटेशन की ओर इशारा करता है!




जैक्सन 2.x में, उपयोग करें:

@JsonInclude(JsonInclude.Include.NON_NULL)



आप निम्न मैपर कॉन्फ़िगरेशन का उपयोग कर सकते हैं:

mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);

2.5 के बाद से आप उपयोगकर्ता कर सकते हैं:

mapper.setSerializationInclusion(Include.NON_NULL);



मेरे मामले में

@JsonInclude(Include.NON_EMPTY)

इसे काम किया




@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_EMPTY)

कार्य करना चाहिए।

Include.NON_EMPTY इंगित करता है कि संपत्ति को क्रमबद्ध किया जाता है यदि इसका मान रिक्त नहीं है और खाली नहीं है Include.NON_NULL इंगित करता है कि संपत्ति serialized है अगर इसके मूल्य शून्य नहीं है।




यदि आप इस नियम को जैक्सन 2.6+ में सभी मॉडलों में जोड़ना चाहते हैं:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);



जैक्सन 2.5 उपयोग के लिए:

@JsonInclude(content=Include.NON_NULL)






यह कुछ समय के लिए मुझे परेशान कर रहा था और अंत में मुझे इस मुद्दे को मिला। यह मुद्दा गलत आयात के कारण था। इससे पहले मैं उपयोग कर रहा था

com.fasterxml.jackson.databind.annotation.JsonSerialize

जो नापसंद किया गया था बस द्वारा आयात की जगह

import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;

और इसे इस्तेमाल के रूप में

@JsonSerialize(include=Inclusion.NON_NULL)



जैक्सन 2.x + का उपयोग करें

mapper.getSerializationConfig().withSerializationInclusion(JsonInclude.Include.NON_NULL);



यदि आप ऑब्जेक्ट की एक सूची को सीरियल करने का प्रयास कर रहे हैं और इनमें से कोई भी रिक्त है, तो आप भी JSON में शून्य आइटम सहित समाप्त हो जाएगा

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

में परिणाम होगा:

[{MyObject}, अशक्त]

इसे पाने के लिए:

[{MyObject}]

कोई ऐसा कुछ कर सकता है:

mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
        @Override
        public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused)
                throws IOException
        {
            //IGNORES NULL VALUES!
        }
    });

युक्ति: यदि आप DropWizard का उपयोग कर रहे हैं तो आप जर्नल द्वारा पर्यावरण का उपयोग करने वाले ObjectMapper को पुनः प्राप्त कर सकते हैं। GetObjectMapper ()