2012-02-02 17 views
115

को रोकने के लिए मैं एक पासवर्ड क्षेत्र के साथ एक इकाई वर्ग है:जैक्सन: कैसे क्षेत्र क्रमबद्धता

class User { 
    private String password; 

    //setter, getter.. 
} 

मैं इस क्षेत्र को क्रमबद्धता दौरान छोड़ी नहीं जा करना चाहते हैं। लेकिन यह अभी भी deserialize करने में सक्षम होना चाहिए। इसकी आवश्यकता है, ताकि ग्राहक मुझे एक नया पासवर्ड भेज सके, लेकिन वर्तमान में पढ़ने में सक्षम नहीं है।

मैं जैक्सन के साथ इसे कैसे पूरा करूं?

+1

आप इसे क्रमानुसार करने नहीं करना चाहती उपयोग कर सकते हैं, लेकिन आप इसे deserialize करने के लिए सक्षम होना चाहते हैं? यह असंभव है, मैं कहूंगा। यदि आप एक बॉक्स में कुकी नहीं डालते हैं, तो आप इसे इस बॉक्स से पुनर्प्राप्त नहीं कर पाएंगे। –

+1

@ ट्रारोथ: लेकिन मैं एक नई कुकी डाल सकता हूं। मैं बस एक सुविधाजनक एनोटेशन की तलाश में हूं, लेकिन यह निश्चित रूप से हाथ से किया जा सकता है। – weekens

+7

त्वरित टिप्पणी: यह पूरी तरह से संभव है, तकनीकी रूप से, एक सेटटर जिसका उपयोग किया जाता है (यहां तक ​​कि निजी वाले ऑटो-डिज़ाइन भी होते हैं), और केवल एक्सेसर को छोड़ दें (कोई सार्वजनिक क्षेत्र या गेटटर नहीं)। गेटटर पर '@ जेसन इग्नोर' जोड़ना भी संभव है, लेकिन सेटर पर '@ जेसनप्रोपर्टी', जिस स्थिति में चीजों को क्रमबद्ध नहीं किया जाता है, लेकिन इसे deserialized किया जा सकता है। – StaxMan

उत्तर

135

आप इसे @JsonIgnore के रूप में चिह्नित कर सकते हैं।

+6

@ जेसन इग्नोर भी deserialization रोकता है। क्षणिक के लिए - मैं इसे देख लूंगा। – weekens

+86

1.9 के साथ, आप गेटर के लिए '@ जेसन इग्नोर' जोड़ सकते हैं, सेटर के लिए '@ जेसनप्रोपर्टी', इसे deserialize बनाने के लिए, लेकिन serialize नहीं। – StaxMan

+0

StaxMan की टिप्पणी का जवाब होना चाहिए, है ना? यह अभी भी एक टिप्पणी क्यों है ...! ..? –

16

@JsonIgnore के अलावा, वहां अन्य संभावनाओं के एक जोड़े हैं:

  • उपयोग JSON Views सशर्त क्षेत्रों को फिल्टर करने (डिफ़ॉल्ट, अक्रमांकन के लिए इस्तेमाल नहीं द्वारा; में 2.0 उपलब्ध हो जाएगा, लेकिन आप पर अलग दृश्य का उपयोग कर सकते हैं क्रमबद्धता, अक्रमांकन)
  • वर्ग पर @JsonIgnoreProperties उपयोगी
83

दृष्टांत क्या StaxMan ने कहा है हो सकता है, यह मेरे

०१२३५१६४१० लिए काम करता है
@JsonIgnore 
public String password; 

@JsonIgnore 
public String getPassword() { 
    return password; 
} 

@JsonProperty 
public void setPassword(String password) { 
    this.password = password; 
} 
+10

आप किस जेसन निर्भरता का उपयोग करते हैं? यह com.fasterxml.jackson –

+3

धन्यवाद के साथ काम नहीं करता है! क्षेत्र में '@ जेसन इग्नोर' जरूरी नहीं है, ऐसा लगता है। –

+0

com.fasterxml.jackson.annotation.Json जैक्सन-एनोटेशन से अनदेखा करें- .jar – mvmn

4

transient मेरे लिए समाधान है। धन्यवाद! यह जावा के मूल निवासी है और आपको एक और ढांचा-विशिष्ट एनोटेशन जोड़ने के लिए बचाता है।

+1

यह काम करता है यदि आपकी विशेषता वास्तव में क्षणिक है, उदाहरण के लिए ओआरएम शामिल नहीं है .... उदाहरण के लिए मिला @ जेसन इग्नोर मेरे मामले में और अधिक दिलचस्प होने के लिए, हालांकि मुझे जैक्सन पर बंद कर दिया जाएगा, लेकिन यह एक अच्छा ट्रेडऑफ है –

+3

आपके पास नहीं है जैक्सन पर लॉक होने के लिए यदि आप अपनी खुद की एनोटेशन बनाते हैं और इसे जेसन इग्नोर और जैक्सन एनीोटेशन इनसाइड द्वारा एनोटेट किया गया है। इस तरह, यदि आप धारावाहिकों को बदलते हैं, तो आपको केवल अपनी टिप्पणी बदलनी होगी। – DavidA

31

आपके गेटर्स और सेटर्स को एनोटेट करना आसान तरीका है।

सादा पाठ पासवर्ड को बाहर करने के लिए संशोधित मूल उदाहरण यहां दिया गया है, लेकिन फिर एक नई विधि को एनोटेट करें जो केवल पासवर्ड फ़ील्ड को एन्क्रिप्टेड टेक्स्ट के रूप में लौटाता है। क्यों आप पासवर्ड के लिए एक सार्वजनिक गेटर विधि चाहेगा

class User { 
    private String password; 

    public void setPassword(String password){...} 
    @JsonIgnore 
    public String getPassword(){...} 

    @JsonProperty("password"} 
    public String getEncryptedPassword(){...} 
} 
3

एक से पूछना चाहिए। हाइबरनेट, या कोई अन्य ओआरएम ढांचा, एक निजी गेटर विधि के साथ करेगा। जाँच करें कि क्या पासवर्ड सही है के लिए, आप

public boolean checkPassword(String password){ 
    return this.password.equals(anyHashingMethod(password)); 
} 
+0

मुझे वास्तव में लगता है कि समाधान के बारे में सोचने का यह सबसे अच्छा तरीका है। यह उन चीज़ों को बनाने के लिए अधिक समझ में आता है जिन्हें आपको निजी की आवश्यकता होती है और उन्हें ऑब्जेक्ट से ही नियंत्रित किया जाता है। – arcynum

संबंधित मुद्दे