7

私は Apache Wink を使用して JAX-RS ベースの ReST アプリケーションを作成しており、パス パラメータとリソース ハンドル クラスとの関連付けの概念を理解しました。@Pathここで、HTTPメソッドに基づいて呼び出されるアノテーションと対応するリソースを使用してパスを定義できることがわかります..

現在、可変数のパスパラメーターに対して呼び出されるリソースのようなものを見ています。

たとえば、単一のリソース クラスを次CollegeResourceのような URI に対して呼び出す必要があり/rest/college, /rest/college/subject, /rest/college/subject/teachers, 、任意の数のパス パラメーターを使用できます。

以前にパスパラメーターの数を知っていれば、このようなものを使用してこれを達成できたはず/rest/college/{param1}/{param2}です。ただし、パス パラメータの数は不明です。だから私は(私が間違っているかもしれませんが)このアプローチを使うことができないと感じました。

私がまだ使用できるもう 1 つの方法は、クエリ パラメーターを使用することです。しかし、これをパスパラメーターとしてのみ利用できるようにしたいと考えています。

他の構成で apache wink を使用してこれを行う方法はありますか? Apache wink にない場合、他の JAX-RS 実装はこれをサポートしていますか?

4

1 に答える 1

9

のような正規表現を@Path("/college/{param: .*}")使用List<PathSegment>して、メソッドのパラメーターとして使用できます。例えば

@GET
@Path("/college/{params: .*}")
public Response get(@PathParam("params") List<PathSegment> params) {
    StringBuilder builder = new StringBuilder();
    for (PathSegment seg: params) {
        builder.append(seg.getPath());
    }
    return Response.ok(builder.toString()).build();
}

C:\>curl -v http://localhost:8080/college/blah/hello/world/cool
結果: blahhelloworldcool

でも個人的にはこういうのは避けたい。URI パス (テンプレート) には、意味的な意味が必要です。意味を持たない可能性のある任意の数のパス パラメータを許可すると、エラーが発生しやすくなり、IMO は再設計の原因になります。ただし、アドバイスを提供する前に、この設計の選択の背後にあるセマンティクスを知る必要があります。

于 2015-03-13T01:15:51.107 に答える