私はかなりグーグルで調べて、 Jerseyのソースコードを掘り下げようとしましたが、私が知る限り、Jerseyは@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を持つことは可能ですか?
この質問は、似たような、しかしわずかに異なる結果を達成しようとしていると思います。
この他の質問は、私の質問のより具体的な形式だと思います。パスをハードコーディングせず、任意の深さにすることができるソリューションを探しています。