このパラメータースタイルを使用する方法はありますか。
/ products / 123; 456; 789
ジャージーとJAX-RSで?PathParamを使用すると、リストの最初のパラメーターのみが返されます。セミコロンをエスケープしようとしましたが、ジャージーは最初のパラメーターリストエントリの値として「123; 456; 789」のみを返します
GETメソッドを次のように宣言しました
public List<Product> getClichedMessage(@PathParam("ids") List<String> idList)
更新:私はJersey 1.1.5のJerseyユーザーガイドを参照しています。
一般に、メソッドパラメータのJavaタイプは(...)4)List、Set、またはSortedSetであり、Tは上記の2または3を満たします。結果のコレクションは読み取り専用です。(...)パラメータには、同じ名前の複数の値が含まれる場合があります。この場合、4)のタイプを使用してすべての値を取得できます。
更新:ここに私のテストコードがあります:
package de.betabeans.resources;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@Path("/test")
public class TestResource {
@GET
@Path("/{ids}")
@Produces({"text/plain"})
public String getClichedMessage(@PathParam("ids") List<String> idList) {
return "size=" + idList.size();
}
}
セミコロンをエスケープしたテストURL:http:// localhost:8080 / resources / test / 1%3B2%3B3
更新:Jersey 1.3の変更ログには、次の情報が含まれています。
修正された問題540
http://java.net/jira/browse/JERSEY-540パラメータ化されたタイプのList / Set / SortedSetは、たとえば@QueryParam( "d")List>などのパラメータでサポートされています。StringReaderProviderが登録されている場合タイプリストをサポートします。
この投稿http://comments.gmane.org/gmane.comp.java.jersey.user/7545に基づいてStringReaderProviderをチェックします。
セミコロンを使用する場合は、マトリックスパラメーターを作成します。@MatrixParam
またはPathSegment
を使用して取得できます。例:
public String get(@PathParam("param") PathSegment pathSegment)
マトリックスパラメーターは、元のパラメーターに続くものであることに注意してください。したがって、「123; 456; 789」の場合-123はパスパラメータですが、456および789はマトリックスパラメータの名前です。
したがって、IDで製品を取得したい場合は、次のようにすることができます。
public List<Product> getClichedMessage(@PathParam("ids") PathSegment pathSegment) {
Set<String> ids = pathSegment.getMatrixParameters().keySet();
// continue coding
}
あなたのURLは /products/ids;123;456;789
実際、IMOはあまり良い設計ではありません。マトリックスパラメーター名を値として使用します。クエリパラメータを使用する方が良いと思います:/products?id=123&id=456&id=789
なので、メソッドで簡単に取得できます。
public List<Product> getClichedMessage(@QueryParam("id") List<String> ids)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加