簡體   English   中英

如何在不同資源中重用REST方法?

[英]How to reuse a REST methods in different resources?

嗨,

我正在使用Jersey和Java構建REST-api。 我想知道是否有可能在許多資源中重用一種方法。

例如,如果我有此代碼:

@Path("/users")
public class UserResource {
    @GET
    @Path("/{uid}/comments")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Comment> getComments() {
        return commentService.getOnEntity("User", uid);
    }   
}

和這個:

@Path("/items")
public class ItemResource {
    @GET
    @Path("/{uid}/comments")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Comment> getComments() {
        return commentService.getOnEntity("Item", uid);
    }   
}

是否可以重用用於指定方法“ / {uid} / comments /”的代碼,這樣我就不必在將需要它的每個資源中編寫它了?

我想我可以用該方法擴展CommentResource,但是我只能添加一組方法。 如果使用接口,則可以指定一組以上的方法,但是必須在每個資源中的方法內部重寫代碼。

編輯從@ thomas.mc.work獲得提示后,我使用子資源重寫了我的代碼。 它比第一個解決方案更好,因為我從子資源中獲取了所有方法,並且每個資源僅占用4行代碼。 它是這樣的:

@Path("/users")
public class UserResource {

    @Path("/{uid}/comments")
    public CommentSubResource getCommentSubResource(@PathParam("uid") String uid) {
        return new CommentSubResource("User", uid);
    }   
}

和這個:

@Path("/items")
public class ItemResource {

    @Path("/{uid}/comments")
    public CommentSubResource getCommentSubResource(@PathParam("uid") String uid) {
        return new CommentSubResource("Item", uid);
    }   
}

和這個:

public class CommentSubResource {

    private String entity;
    private String entityUid;

    public CommentSubResource(String entity, String entityUid) {
        this.entity = entity;
        this.entityUid = entityUid;
    }

    @GET
    @Path("/")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Comment> getComments() {
        return commentService.getOnEntity(entity, entityUid);
    }

    @DELETE
    @Path("/")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Comment> deleteComment(@PathParam("uid") String uid) {
        return commentService.delete(uid);
    }
}

這樣好多了。 我有一個想法,可以使用Java 8和默認實現接口來實現接口的功能,但是我不確定是否可以確定從哪個資源調用默認實現的方法。

編輯
經過一些努力之后,我認為子資源是必經之路,即使(根據我的觀點)這不是完美的解決方案。

有一個類似的功能稱為“子資源定位符” 您可以在運行時決定選擇哪個資源來處理與您的JAX-RS方法匹配的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM