2012-12-04 10 views
5

को बाहर मैं एक उपयोग के मामले में यह बहिष्कार जानकारी के साथ JSONView एनोटेशन उपयोग करने के लिए अधिक उपयुक्त लग रहा है, जहां है, उदाहरण के लिए (1.9.2) अब तक, मुझे आश्चर्य है कि जैक्सन में यह हासिल करने के लिए एक आसान कामकाज है।JSONView एनोटेशन/विशेषता

उपयोग मामला:

  • रिपोर्ट 1: यह दृश्य id, name, info1, info2, info3, info4 होना चाहिए विशेषताओं
  • रिपोर्ट 2: यह दृश्य id, name, info1, info2, info4 होना चाहिए विशेषताओं
  • रिपोर्ट [3 ..] कई अन्य विचारों संभव हो रहे हैं कहो
 
private int id; 
    private String name; 
    private String info1; 
    private String info2; 
    //ignore if view=report2 
    @JsonView(ReportViews.Report2.class , include=false) 
    private String info3; 
    private String info4; 

मेरा उपयोग केस विचारों के आधार पर विशेषताओं को छोड़ रहा है (या रिपोर्ट-आईडी कहते हैं)। JSONView दृष्टिकोण के साथ मुझे इसे निकालने के लिए Report2 को छोड़कर info3 विशेषता में सभी दृश्य जोड़ने की आवश्यकता है। अच्छी तरह फिट नहीं है।

इस परिदृश्य में सही दृष्टिकोण क्या होना चाहिए? बहिष्कार/समावेशन को छोड़कर अनुकूलित JSONView सही समाधान होगा यदि कुछ पहले से ही उपलब्ध नहीं है।

उत्तर

1

जैक्सन की जेएसओएन व्यू कार्यक्षमता समावेशन के मानदंडों पर आधारित है, इसलिए आप मौजूदा एनोटेशन नहीं बदल सकते हैं।

2

इस तरह से किसी विशिष्ट दृश्य से फ़ील्ड को बाहर करने का कोई तरीका प्रतीत नहीं होता है।

हालांकि आप आवश्यक तत्वों से दृश्य लिखने के लिए इंटरफेस का उपयोग करके अपने विचारों को बहुत लचीला रूप से बना सकते हैं।

ऊपर मामले में मैं यह कोशिश करेंगे:

public class ReportViews { 
    public interface NeedsInfo3 {}; 

    public static class Report1 implements NeedsInfo3 {}; 
    public static class Report2 {}; 
} 

फिर अपने मॉडल में क्षेत्र विशेष दृश्य का उपयोग करें।

private int id; 
private String name; 
private String info1; 
private String info2; 

@JsonView(ReportViews.NeedsInfo3.class) 
private String info3; 
private String info4; 
+0

धन्यवाद, सही बहिष्कार सीधे संभव नहीं है, मैं अंत में विस्तारित 'Jackson' functionlity अपने कस्टम एनोटेशन समर्थन करने के लिए, नमूना उपयोग के मामले में से एक की तरह है:' @ReportView (perms = {Permission.ShowX, अनुमति। ShowY, ..}, anyPerm = false | true, conditions = "reflectiveConditionMethod", शामिल = false | true) ' – harsh

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

  • कोई संबंधित समस्या नहीं^_^