2012-01-17 14 views
5

के लिए किसी फ़ील्ड को जोड़ने और अनदेखा करने के लिए मैं जैक्सन में प्रतिक्रिया वापस करने के लिए RestEasy और हाइबरनेट का उपयोग कर रहा हूं। मेरे पास एक बीन प्लेयर है जिसमें फ़ील्ड हैं: नाम, आईडी, आयु, स्थिति।जेसन प्रतिक्रिया

अब, मैं दो GET जेसन को पुनः प्राप्त करने के लिए बाकी तरीकों को लागू कर रहा हूं।

  1. getPlayer(), जो एक खिलाड़ी को वापस कर रहा है: नाम, आईडी, आयु, स्थिति।

  2. getPlayers(), जो खिलाड़ियों की एक सूची लौटा रहा है, लेकिन खिलाड़ियों की इस सूची के साथ, मैं स्थिति वापस नहीं करना चाहता हूं।

मेरा मतलब है, मैं एक प्रतिक्रिया के लिए एक क्षेत्र कैसे जोड़ सकता हूं और इसे किसी अन्य प्रतिक्रिया के लिए अनदेखा कर सकता हूं।

कृपया सुझाव दें।

धन्यवाद

उत्तर

-7

आप बस स्थिति क्षेत्र से बाहर शून्य नहीं कर सकते?

@GET 
@Path("/players") 
public List<Player> getPlayers(){ 
    List<Player> players = getPlayersFromHibernate(); 

    for(Player player : players) 
     player.setPosition(null); 

    return players; 
} 
+4

यदि आप फ़ील्ड को बाहर निकालने के लिए कोड लिखना भूल जाते हैं तो यह आपको एक बग पेश करने के लिए खोलता है। '@ JsonIgnore' का उपयोग करें ताकि आपको यह नहीं करना पड़े। –

+0

ओपी की आवश्यकता को कैसे हल करेगा "मैं एक प्रतिक्रिया के लिए एक क्षेत्र कैसे जोड़ सकता हूं और इसे किसी अन्य प्रतिक्रिया के लिए अनदेखा कर सकता हूं।" ?इसके अलावा, जब आप कोड हमेशा बग का कारण बनेंगे, तो सामान को करने के लिए 'भूलना'; – eiden

+1

यह उन चीज़ों को @JsonIgnore जोड़ने के साथ-साथ हमेशा अनदेखा होने के साथ-साथ मेरे लिए सबसे आसान समाधान दिखता है। एडेन, क्या आपको ऐसा करने का कोई और तरीका मिला है? मुझे जेसनव्यू और जेसनफिल्टर के समान परिणाम प्राप्त करने के लिए उपयोग नहीं किया जा सकता है। – Jayz

17

आप POJO गेटर पर @JsonIgnore एनोटेशन का उपयोग करना चाहिए।

http://jackson.codehaus.org/1.0.1/javadoc/org/codehaus/jackson/annotate/JsonIgnore.html

अद्यतन:

आप अपने अनुरोध मानचित्रण पर @JSONFilter रूप @JsonIgnoreProperties साथ इंटरफेस का उपयोग और यह सेट करना होगा।

आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring

+0

कि मुझे पता है, लेकिन मैं एक और – Romi

+0

ठीक है के लिए जोड़ने के लिए तो मेरे अद्यतन –

+0

देखने के लिंक के रूप में दी एक प्रतिक्रिया है और एक ही क्षेत्र के लिए की अनदेखी करने के एक ही क्षेत्र चाहते हैं ... मैं एक इंटरफ़ेस AppDetailFilter बनाने की जरूरत है(), और अनुरोध के साथ @ जेसनफ़िल्टर का उपयोग करें। लेकिन इंटरफ़ेस में क्या होना चाहिए, और विभिन्न अनुरोधों के लिए अलग-अलग फ़ील्ड को अनदेखा करने के लिए इसका उपयोग कैसे नहीं किया जा रहा है। – Romi

0

मैं tomee उपयोग कर रहा हूँ, मेरे लिए काम करता है transient json जवाब में एक क्षेत्र की अनदेखी करने, लेकिन अगर यह जाने के लिए सही तरीका क्या है मुझे पता नहीं (वहाँ बस कोई जैक्सन अपने आवेदन करने के लिए दिख रहा है, मैं शामिल जेईई-जाल एपीआई):

सर्वलेट

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/") 
@Produces({ MediaType.APPLICATION_JSON }) 
public class JsonApi { 

    @GET 
    @Path("testapi") 
    public MyObject testApi() { 
     return new MyObject("myname", "mycolor"); 
    } 
} 

वस्तु

public class MyObject { 

    public MyObject() { 
    } 

    public MyObject(String name, String color) { 
     this.name = name; 
     this.color = color; 
    } 

    public String name; 

    public transient String color; 
} 

Respo एनएसई

{"name":"myname"} 
+0

दृढ़ता का उपयोग करते समय यह दृष्टिकोण समस्याएं पेश कर सकता है, मैं उस तरह से नहीं जाऊंगा। दूसरी तरफ, यदि आप डेटा ऑब्जेक्ट के लिए इस ऑब्जेक्ट का उपयोग करते हैं, तो यह ठीक होना चाहिए। – holmicz

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