2011-12-12 13 views
8

एनोटेट किए बिना जैक्सन JSON दृश्यों का उपयोग करना क्या कोई तरीका है कि मैं जैक्सन JSON दृश्य या कुछ ऐसा कर सकता हूं, मूल बीन कक्षा को एनोटेट किए बिना? मैं कुछ ऐसा करने के लिए कुछ प्रकार के रनटाइम/गतिशील विन्यास की तलाश में हूं।मूल बीन वर्ग

मेरा बीन एक JAR में पैक किया गया एक @Entity है जिसे कई परियोजनाओं द्वारा साझा किया जा सकता है। मैं खपत परियोजनाओं में यूआई परिवर्तनों के कारण साझा जेएआर को छूने और पुनः पैकेज करने से बचने की कोशिश कर रहा हूं।

आदर्श रूप में मैं

Bean { 
    @JsonView(View.class) 
    String property1; 

    @JsonView(View.class) 
    String property2; 
} 

कोई भी विचार बदलने के लिए

jsonViewBuilder = createViewBuilder(View.class); 
jsonViewBuilder.addProperty("property1"); 
jsonViewBuilder.addProperty("property2"); 

की तरह कुछ करना चाहते हैं?

अंतर्निहित पर्यावरण: वसंत 3.0, स्प्रिंग एमवीसी और ग्लासफ़िश 3.1.1।

उत्तर

12

मिक्स-इन सुविधा का उपयोग करने के बारे में कैसे?

http://wiki.fasterxml.com/JacksonMixInAnnotations

http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html


import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; 
import org.codehaus.jackson.annotate.JsonMethod; 
import org.codehaus.jackson.map.ObjectMapper; 
import org.codehaus.jackson.map.SerializationConfig; 
import org.codehaus.jackson.map.annotate.JsonView; 

public class JacksonFoo 
{ 
    public static void main(String[] args) throws Exception 
    { 
    ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY) 
     .configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false); 
    mapper.getSerializationConfig().addMixInAnnotations(Bar.class, BarMixIn.class); 
    mapper.setSerializationConfig(mapper.getSerializationConfig().withView(Expose.class)); 

    System.out.println(mapper.writeValueAsString(new Bar())); 
    // output: {"b":"B"} 
    } 
} 

class Bar 
{ 
    String a = "A"; 
    String b = "B"; 
} 

abstract class BarMixIn 
{ 
    @JsonView(Expose.class) 
    String b; 
} 

// Used only as JsonView marker. 
// Could use any existing class, like Object, instead. 
class Expose {} 
+0

मैं '@ JsonView' साथ mixin व्याख्या का उपयोग कर सकते हैं? उदाहरण केवल '@ जेसनप्रोपर्टी' दिखाते हैं। – wrschneider

+0

हां। उदाहरण के साथ अद्यतन उत्तर। –

+0

खूबसूरती से काम करता है, धन्यवाद! अब अगर प्रत्येक नियंत्रक में दोहराने से बचने के लिए उस सेटअप सामान को दोबारा करने का एकमात्र तरीका है। – wrschneider

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