JAX-RS自动解码pathparam(Jax-rs automatic decode pathpa

2019-08-03 07:41发布

我有接收一组的路径中的参数,pathparameters一个JAX-RS的服务。 这些参数可以是含有不适合的URL值的字符串,所以它们在使用java.net.URLEncoder中,像这样的客户端进行了urlencoded:

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

这是用来构建URL supplier/group/param1/param2/param3 。 如果其中一个是由于改变的URL编码,例如,如果它只是一个空间,在服务接收到的字符串是+迹象。

@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的空间,它能够帕拉姆解码。

Answer 1:

pathparams的自动编码按预期工作。 问题是, %20用于编码在URL中的空间,而+用于编码的查询字符串(后部分?)。 Pathparams真的是URL的一部分,所以20%应该使用。

使用URI.toAsciiString()代替UrlEncoder.encode(...)并通过不同的部分给出了正确解码一个有效的URL。



Answer 2:

从报价PathParam的javadoc:

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



文章来源: Jax-rs automatic decode pathparam