このデザインを再考する良い機会かもしれません。sを使用/
することで、ある意味では、それぞれ/
が異なるリソースを見つけようとしていることを意味しています。キーと値のペア (URL のコンテキストで) は、主にクエリ パラメーターまたはマトリックス パラメーター用です。
/property/{uuid}
がメイン リソースへのパスであり、このリソースにアクセスするためのパラメーターをクライアントに提供したい場合は、マトリックス パラメーターまたはクエリ パラメーターを許可できます。
マトリックス パラメータ(リクエスト URL 内) は次のようになります。
/12345;key1=value1;key2=value2;key3=value3
値を取得するためのリソース メソッドは次のようになります。
@GET
@Path("/property/{uuid}")
public Response getMatrix(@PathParam("uuid") PathSegment pathSegment) {
StringBuilder builder = new StringBuilder();
// Get the {uuid} value
System.out.println("Path: " + pathSegment.getPath());
MultivaluedMap matrix = pathSegment.getMatrixParameters();
for (Object key : matrix.keySet()) {
builder.append(key).append(":")
.append(matrix.getFirst(key)).append("\n");
}
return Response.ok(builder.toString()).build();
}
クエリ パラメータ(リクエスト URL 内) は次のようになります。
/12345?key1=value1&key2=value2&key3=value3
値を取得するためのリソース メソッドは次のようになります。
@GET
@Path("/property/{uuid}")
public Response getQuery(@PathParam("uuid") String uuid,
@Context UriInfo uriInfo) {
MultivaluedMap params = uriInfo.getQueryParameters();
StringBuilder builder = new StringBuilder();
for (Object key : params.keySet()) {
builder.append(key).append(":")
.append(params.getFirst(key)).append("\n");
}
return Response.ok(builder.toString()).build();
}
違いは、Matrix パラメーターはパス セグメントに埋め込むことができるのに対し、クエリ パラメーターは URL の末尾に配置する必要があることです。また、構文のわずかな違いにも気付くでしょう。
いくつかのリソース
アップデート
また、PUT
メソッドの署名を見ると、更新しようとしている値としてパスを使用してリソースを更新しようとしているようです。エンティティ本体のメソッドにパラメーターが表示されないためです。PUTting するときは、パス セグメントやパラメーターとしてではなく、エンティティ本体で表現を送信する必要があります。