5

私はかなりグーグルで調べて、 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を持つことは可能ですか?

この質問は、似たような、しかしわずかに異なる結果を達成しようとしていると思います。
この他の質問は、私の質問のより具体的な形式だと思います。パスをハードコーディングせず、任意の深さにすることができるソリューションを探しています。

4

0 に答える 0