0

我在 resygwt 上使用这样的 API 提供了基于 REST 的服务:

@Path("/search")
@GET
List<User> search(@QueryParam("login") String loginMask) throws RemoteException;

我收到此请求的“格式错误的 URI 序列”:

http://devsys23:8080/rest/search?login=%25spa%20ce%25

这很奇怪,因为在 JavaDoc 中提到,默认情况下应该支持这样的请求:

  • 将 HTTP 查询参数的值绑定到资源方法参数,
  • 资源类字段或资源类 bean 属性。
  • 除非使用 {@link Encoded} 禁用此值,否则对值进行 URL 解码
  • 注解。可以使用 {@link DefaultValue} 指定默认值
  • 注解。

我尝试使用 useBodyEncodingForURI 和 URIEncoding="UTF-8" 在 server.xml 中编辑 tomcat 连接器。还包括 org.springframework.web.filter.CharacterEncodingFilter 并设置了 forceEncoding,但它仍然不起作用 =(

我应该怎么做才能指定应该解码登录参数?如果有的话,谢谢你的建议。

4

1 回答 1

0

如果您想解码该值,您可以创建一个ContainerResponseFilter,将其注册到您的ResourceConfig并执行类似的操作

String loginValue= queryParams.get("login");
loginValue= URLDecoder.decode(loginValue, "UTF-8");

也许 RestyGWT 默认对所有参数进行编码。

需要在 restyGWT 谷歌讨论上提问:https ://groups.google.com/forum/#!forum/restygwt

于 2014-09-22T11:56:54.677 回答