我使用球衣客户端向我的球衣服务器发送查询参数。这是查询:?sort=id+ASC
Jersey 1.x正在用空格符号替换加号。我怎样才能防止这一点?
但在我的代码检索此查询参数,return uriInfo.getQueryParameters().getFirst("sort");
,此值计算为id ASC
。为什么会发生这种情况,我该如何预防它?
我使用球衣客户端向我的球衣服务器发送查询参数。这是查询:?sort=id+ASC
Jersey 1.x正在用空格符号替换加号。我怎样才能防止这一点?
但在我的代码检索此查询参数,return uriInfo.getQueryParameters().getFirst("sort");
,此值计算为id ASC
。为什么会发生这种情况,我该如何预防它?
除此之外,你可以利用@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();
}
这个'@ Encoded'是否存在于1.x中? –
@tieTYT:是的。我已经做了一个快速搜索,看看它被添加到哪个版本中,并且从1.4开始它似乎已经存在:https://jersey.java.net/apidocs/1.4/jersey/javax/ws/rs/Encoded.html – Bogdan
的'排序= ID + ASC查询字符串? '_does_表示“id ASC”的参数值,因为查询字符串是“application/x-www-form-urlencoded”。如果你想发送一个参数值“id + ASC”,那么你必须使用一个查询字符串'sort = id%2BASC' –
@IanRoberts我看到。我想我可以忍受它。 –