私はpathパラメータのセットをパスパラメータで受け取るjax-rsサービスを持っています。これらのパラメータは、URLのない適切な値を含む文字列であってもよいし、そう、彼らはそうのようなjava.net.UrlEncoderを使用してクライアント側でURLエンコードされています。これは、URL supplier/group/param1/param2/param3
を構築するために使用されJax-rs自動デコードパスパラム
String param = URLEncoder.encode(o.toString(), "UTF-8");
。これらのうちの1つがurlencodingのために変更された場合、たとえばスペースだけの場合は、サービスで受信された文字列は+
です。
@GET
@Path("{supplierId}/{groupCode}/{groupId}")
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public SupplierGroup getSupplierGroup(@PathParam("supplierId") BigDecimal supplierId,
@PathParam("groupCode") String groupCode,
@PathParam("groupId") BigDecimal groupId) {
//now groupCode is "+", not " "
}
私はjaxrsが自動的にエンコードされたパスのparamsをデコードすることを期待します。
EDIT: もう少しテストしたところ、スペースに%20
を使用して送信すると、パラメータをデコードできることがわかりました。 PathParamのjavadocから
'URI.toAsciiString'の使用は必ずしも機能しません。 @ yegor256の答えはより堅牢です。関数デコンベーションの上に '@ Encoded'アノテーションを追加してください。 – SomethingSomething