2013-10-30 11 views
5

का उपयोग कर बूलियन को जेएसओएन को स्ट्रिंग के रूप में क्रमबद्ध करने के लिए कैसे करें हमने जेएसओएन क्रमबद्धता के लिए जर्सी जेएक्स-आरएस और जैक्सन (संस्करण 2.1.5) का उपयोग करके एक आरईएसटी सेवा विकसित की है।जैक्सन

चूंकि एप्लिकेशन को मौजूदा मोबाइल ऐप के बैकएंड के रूप में काम करने वाली पुरानी विरासत सेवा के लिए एक ड्रॉप-इन प्रतिस्थापन माना जाता है, इसलिए हमें जैविक मूल्यों को जैविक मूल्यों को क्रमबद्ध करने के तरीके में कुछ बदलाव करना होगा।

{"Foo":"true","Bar":"false"} 

तो मैं एक तरह से तारों के रूप में उत्पादन बूलियन्स को जैक्सन क्रमबद्धता को प्रभावित करने के लिए खोज की है:

मौजूदा मोबाइल एप्लिकेशन बूलियन मूल्यों इस तरह "सही" और "गलत" की श्रृंखला के रूप में व्यक्त किया जा करने की उम्मीद , लेकिन मुझे कोई सफलता नहीं है।

ओह, और बीटीडब्ल्यू - चूंकि हमारे मॉडल वर्ग जेएक्सबी कक्षा पीढ़ी का उपयोग कर एक्सएमएल स्कीमा से उत्पन्न किए गए हैं, इसलिए हम जेसन एनोटेशन के साथ कक्षाओं को एनोटेट नहीं कर सकते हैं।

मैंने ऑब्जेक्टमैपर के साथ एक मॉड्यूल पंजीकृत करने का प्रयास किया है, जो बूलियन ऑब्जेक्ट्स के लिए एक अनुकूलित सीरिएलाइज़र प्रदान करता है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा था।

उत्तर

1

ठीक है, ऐसा लगता है कि या तो मेरा आईडीई या मेवेन अभिनय कर रहा था और मैंने अपने ObjectMapper कॉन्फ़िगरेशन में किए गए परिवर्तनों को बनाने या संदर्भित करने से इंकार कर दिया था।

भविष्य आगंतुकों के लिए, यहाँ तारों के रूप में बूलियन मूल्यों थूक से बाहर के लिए बाध्य जैक्सन डेटा बनाने के मुद्दे का हल का सार है:

मेरी अनुकूलित ObjectMapper संदर्भ समाधानकर्ता में, मैं तो बस करना पड़ा बूलियन ऑब्जेक्ट प्रकारों के लिए विशेष धारावाहिक जोड़ें:

// create a module with a custom Boolean serializer 
SimpleModule module = new SimpleModule("BooleanAsString", new Version(1, 0, 0, null, null, null)); 
module.addSerializer(new NonTypedScalarSerializerBase<Boolean>(Boolean.class){ 
    @Override 
    public void serialize(Boolean value, JsonGenerator jgen, SerializerProvider provider) 
    throws IOException, JsonGenerationException { 
     ObjectMapperProvider.log.debug("serializing boolean value as a Strng"); 
     jgen.writeString(value.toString()); 
    } 
}); 
// Here's where we configure the object mapper 
ObjectMapper mapper = new ObjectMapper(); 
mapper.registerModule(module); 

यही है। यदि आप जानते हैं कि अपने ऑब्जेक्टमैपर को कैसे कॉन्फ़िगर करें, तो यह आपको जाने के लिए पर्याप्त होना चाहिए।

+0

प्रकार NonTypedScalarSerializerBase

+0

शायद पदावनत कर रहा है। यह एक _old, पुराना, पुराना_ उत्तर है ... –

3

जैक्सन 2.16 आदिम डेटा प्रकार के लिए कस्टम सीरिएलाइज़र। आपको अपना खुद का धारावाहिक लिखना चाहिए। बूलियन डेटा प्रकार

// के लिए उदाहरण कोड एक कस्टम बूलियन serializer

class BooleanSerializer extends JsonSerializer<Boolean> { 
private final static Logger logger = LoggerFactory.getLogger(BooleanSerializer.class); 
@Override 
public void serialize(Boolean value, JsonGenerator jgen, SerializerProvider provider) 
     throws IOException, JsonGenerationException { 
    logger.info("serializing boolean value as a Strng {}",value); 
    jgen.writeString(value.toString()); 
} 

}

// रजिस्टर कस्टम BooleanSerializer वर्ग ObjectMapper साथ साथ एक मॉड्यूल बनाएँ।

// यहां हम वस्तु नक्शाकार कॉन्फ़िगर

ObjectMapper mapper = new ObjectMapper(); 

SimpleModule simpleModule = new SimpleModule("BooleanAsString", new Version(1, 0, 0, null, null, null)); 
    simpleModule.addSerializer(Boolean.class,new BooleanSerializer()); 
    simpleModule.addSerializer(boolean.class,new BooleanSerializer()); 

mapper.registerModule(module); 
+0

यह मूल रूप से स्वीकार किए गए उत्तर के समान ही है: http://stackoverflow.com/a/19682113/1712 –

+0

मैंने उस कोड को आजमाया जो यह मेरे लिए काम नहीं करता है। –

+0

जो कुछ मैं बता सकता हूं उससे कुछ मामूली विवरण थोड़ा अलग हो सकते हैं लेकिन इसका सब कुछ समान है। –