2012-03-08 30 views
7

Tôi đã cố gắng mở rộng khi ví dụ được cung cấp trong Chương 6 (Tuyên bố siêu kết nối) của tài liệu Jersey 1.12 nhưng dường như đã đâm vào tường liên quan đến việc sử dụng chú thích @Ref .Siêu liên kết khai báo Java Jersey @Ref Chú thích Sử dụng

Mã của tôi là như sau:

@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; 
    } 
} 

này hoạt động tốt cho URL được tạo ra cho một thể hiện của đối tượng bộ sưu tập Widgets:

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

Tuy nhiên, tôi muốn biết làm thế nào tôi có thể thêm id của các phiên bản Widget trong Bộ sưu tập đến URL cho từng Widget. Vì vậy, các URI được tạo ra sẽ là một cái gì đó như:

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

tôi dường như không thể tìm thấy một cách để sử dụng Ref chú thích để đạt được điều này mà không bắt đầu hardcode toàn bộ giá trị con đường trong lớp Widget, mà tôi d muốn tránh nếu có thể.

Có cách nào tiêu chuẩn để đạt được điều này không?

Trả lời

1

đọc của tôi về tài liệu nói rằng bạn có thể làm một cái gì đó như thế này (chưa được kiểm tra!):

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

Bạn vẫn sẽ có thể làm Bindings với cách tiếp cận này, mặc dù thảm kịch ở đây là bây giờ bạn nhân đôi đường dẫn được mã hóa cứng ở một nơi duy nhất mà một biểu diễn cần một tài nguyên phụ URI. Nếu bạn đang làm đúng hoặc gần đúng REST trong một ứng dụng lớn, điều này có thể là một rắc rối lớn nếu các URI đó thay đổi. – Patrick

Các vấn đề liên quan