2014-02-06 23 views
3

我使用球衣客户端向我的球衣服务器发送查询参数。这是查询:?sort=id+ASCJersey 1.x正在用空格符号替换加号。我怎样才能防止这一点?

但在我的代码检索此查询参数,return uriInfo.getQueryParameters().getFirst("sort");,此值计算为id ASC。为什么会发生这种情况,我该如何预防它?

+2

的'排序= ID + ASC查询字符串? '_does_表示“id ASC”的参数值,因为查询字符串是“application/x-www-form-urlencoded”。如果你想发送一个参数值“id + ASC”,那么你必须使用一个查询字符串'sort = id%2BASC' –

+0

@IanRoberts我看到。我想我可以忍受它。 –

回答

5
从@ IanRoberts的建议

除此之外,你可以利用@Encoded注解让你参数的原始未解码的值(默认情况下泽西解码值,这就是为什么在id+ASC你的代码变得id ASC)。

下面的示例检索解码值作为默认行为:

@GET 
@Produces(MediaType.TEXT_PLAIN) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public Response test(@QueryParam("sort") String sort) { 
    // sort is "id ASC" 
    return Response.ok().entity(sort).build(); 
} 

要改变你只需要添加的行为@Encoded

@GET 
@Produces(MediaType.TEXT_PLAIN) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public Response test(@QueryParam("sort") @Encoded String sort) { 
    // sort is "id+ASC" 
    return Response.ok().entity(sort).build(); 
} 
+0

这个'@ Encoded'是否存在于1.x中? –

+1

@tieTYT:是的。我已经做了一个快速搜索,看看它被添加到哪个版本中,并且从1.4开始它似乎已经存在:https://jersey.java.net/apidocs/1.4/jersey/javax/ws/rs/Encoded.html – Bogdan

相关问题