13

我有一个 jax-rs 服务,它在路径中接收一组参数,pathparameters。这些参数可能是包含不适合 url 的值的字符串,因此它们在客户端使用 java.net.UrlEncoder 进行 urlencoded,如下所示:

String param = URLEncoder.encode(o.toString(), "UTF-8");

这用于构建 url supplier/group/param1/param2/param3。如果其中一个由于 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 能够自动解码编码的路径参数。

编辑:测试更多我发现当发送使用%20空间时,它能够解码参数。

4

2 回答 2

15

pathparams 的自动编码按预期工作。问题在于%20它用于对 url 本身中的空格进行编码,而+用于对查询字符串(?之后的部分)进行编码。路径参数实际上是 URL 的一部分,因此应该使用 %20。

使用URI.toAsciiString()而不是UrlEncoder.encode(...)传递不同的部分会给出一个正确解码的有效 url。

于 2012-12-03T13:22:39.447 回答
3

来自PathParam javadoc 的引用:

该值是 URL 解码的,除非使用 Encoded 注释禁用它。

于 2012-11-29T18:35:52.423 回答