Arbitrarily嵌套子资源中的Jersey @Ref(声明性超链接)

时间:2013-02-22 16:32:46

标签: java rest jersey

我已经搜索了一下并试图深入研究Jersey source code,但据我所知,泽西岛不支持随着@Ref注释任意深度嵌套子资源。

这是我的设置:

MemberResource.java

@Component // Spring managed
@Scope("prototype")
@Validated
@Path("/member")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MemberResource extends BaseResource {

    @Autowired // Spring is injecting this sub resource
    private MemberFriendResource memberFriendResource;

    @Path("/{memberId}/friend/")
    public MemberFriendResource getMemberFriendResource() {
        return memberFriendResource;
    }

}

MemberFriendResource.java

@Component // Spring managed
@Scope("prototype")
@Validated
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MemberFriendResource extends BaseResource {

    @GET
    public JResponse<FriendListRepresentation> getAllFriends() {
        // Code
    }


    @GET
    @Path("/recent")
    public JResponse<FriendListRepresentation> getRecentFriends() {
        // Code
    }
}

MemberRepresentation.java

public class MemberRepresentation {
    @Ref(resource=MemberResource.class, method="getMemberFriendResource", bindings = {
    @Binding(name="memberId", value="${instance.id}")
    })
    public URI allFriendsURI;

    @Ref(resource=MemberResource.class, method="??????????", bindings = {
    @Binding(name="memberId", value="${instance.id}")
    })
    public URI recentFriendsURI;
}

我希望动态生成recentFriendsURI,就像allFriendsURI一样(它本身确实有效,只是为了清楚)。我意识到我可以手动键入路径,沿@Ref(value="/member/{memberId}/friend/recent", etc)行,但我强烈地,强烈不希望在每个需要链接的随机表示中硬编码我的路径字符串

对于使用资源/方法范例正确绑定的变量注入的子资源方法的URI是否可以使用URI而不是键入String路径?

我相信this question正试图取得类似但略有不同的结果 我认为This other question是我问题的一个更具体的形式。我正在寻找一种解决方案,它不会对路径进行硬编码,而且可以任意深入。

0 个答案:

没有答案