2012-03-08 15 views
7

का उपयोग करें मैं जर्सी 1.12 दस्तावेज के अध्याय 6 (घोषणात्मक हाइपरलिंकिंग) में दिए गए उदाहरण पर विस्तार करने की कोशिश कर रहा हूं लेकिन लगता है कि @Ref एनोटेशन के उपयोग के संबंध में एक दीवार मारा है ।जावा जर्सी घोषणात्मक हाइपरलिंकिंग @ रीफ एनोटेशन

@Path("/offerings/{offeringId}/widgets") 
@Produces(MediaType.APPLICATION_JSON) 
public class WidgetsResource { 
    @GET 
    @Path("/{widgetId}") 
    public Response get(@PathParam("offeringId") String offeringId, @PathParam("widgetId") String widgetId) { 
    Widgets widgets = new Widgets(); 
    widgets.setOfferingId(Integer.valueOf(offeringId)); 
    Widget widget = new Widget(); 
    widget.setId(Integer.valueOf(widgetId)); 
    widgets.setWidgets(Arrays.asList(widget)); 
    return Response.status(200).entity(widgets).build(); 
    } 
} 

public class Widgets { 
    @Ref(resource = WidgetsResource.class, style=Style.ABSOLUTE) 
    URI uri; 
    @JsonIgnore 
    private int offeringId; 
    private Collection<Widget> widgets; 

    public Collection<Widget> getWidgets() { 
     return widgets; 
    } 

    public void setWidgets(Collection<Widget> widgets) { 
     this.widgets = widgets; 
    } 

    public URI getUri() { 
     return uri; 
    } 

    public int getOfferingId() { 
     return offeringId; 
    } 

    public void setOfferingId(int id) { 
     this.offeringId = id; 
    } 
} 

public class Widget { 
    @Ref(resource = WidgetsResource.class, style=Style.ABSOLUTE, bindings={ 
    @Binding(name="offeringId", value="${entity.offeringId}")} 
    ) 
    URI uri; 
    private int id; 

    public URI getUri() { 
     return uri; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

इस विजेट संग्रह वस्तु का एक उदाहरण के लिए निर्मित किए गए URL के लिए ठीक काम करता है:

"uri": "http://localhost:65080/<app>/offerings/9999/widgets" 

हालांकि, मैं चाहता हूँ पता करने के लिए मैं कैसे जोड़ सकते हैं

मेरे कोड इस प्रकार है प्रत्येक विजेट के लिए यूआरएल में संग्रह के भीतर विजेट इंस्टेंस की आईडी।

"uri": "http://localhost:65080/<app>/offerings/9999/widgets/1234" 

मैं विजेट वर्ग के भीतर पूरे रास्ते मूल्य हार्डकोड प्रारंभ किए बिना इस लक्ष्य को हासिल करने के लिए रेफरी एनोटेशन का उपयोग करने का एक तरीका है, जो मैं खोजने के लिए प्रतीत नहीं कर सकते हैं: तो, यूआरआई होगा की तरह कुछ उत्पन्न यदि संभव हो तो बचने के लिए।

क्या यह प्राप्त करने का एक मानक तरीका है?

उत्तर

1

कि दस्तावेज की मेरी पठन आप कुछ इस तरह कर सकता है कहते हैं (अपरीक्षित!):

@Ref(value="/offerings/{offeringId}/widgets/{widgetId}", style=ABSOLUTE) 
URI uri; 
+1

आप अभी भी इस दृष्टिकोण के साथ बाइंडिंग ऐसा करने में सक्षम होना चाहिए, हालांकि त्रासदी यहाँ है कि अब आप कर रहे हैं है हार्ड कोडेड पथ को एक ही स्थान पर डुप्लिकेट करना जो प्रतिनिधित्व को उप संसाधन यूआरआई की आवश्यकता है। यदि आप एक बड़े आवेदन में सच या लगभग सही आरईएसटी कर रहे हैं, तो यह यूआरआई कभी भी बदल सकता है, तो यह एक बड़ी परेशानी हो सकती है। – Patrick

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