我已经搜索了很多,并试图深入研究Jersey 源代码,但据我所知,Jersey 不支持任意深度嵌套子资源以及@Ref
注释。
这是我的设置:
成员资源.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,而不是输入字符串路径?
我相信这个问题试图达到类似但略有不同的结果。
我认为,另一个问题是我的问题的更具体形式。我正在寻找一种不会对路径进行硬编码并且可以任意深度的解决方案。