【发布时间】:2016-06-01 15:01:43
【问题描述】:
我有一个 Jersey 2.22 REST Web 服务,我的一个端点具有以下签名:
@POST
@Path("/query")
public Response doQuery(@FormParam("query") String query) { ... }
我使用 PostMan 调用此 Web 服务,不传递特定的标头,并且在发布请求中,我将“查询”表单参数传递为“x-www-form-urlencoded”。
jersey 应用程序由 Tomcat 7 托管,该 Tomcat 7 以 JVM 编码 UTF-8、file.encoding UTF-8 启动,并且连接器的 URIEncoding 也设置为 UTF-8。
如果通过 PostMan 发送的字符串是“
如果我在方法的开头添加如下内容,一切正常:
String query2 = new String(query.getBytes("ISO-8859-1"), "UTF-8");
我查看了编码的 Forms 规范,我发现为了解码请求,客户端应该发送一个名为“charset”的隐藏参数,它将覆盖默认值(美国 ASCII),但是我尝试将此值添加为标题和 x-www-form-urlencoded 参数中的另一个条目,但泽西岛似乎忽略了它们。
目前也可以使用上述解决方法,但我想确保这对 Jersey 始终有效,但我希望有一种更安全的方法,基本上让 Jersey 从开始,即使这包括强制客户端以不同的方式调用我的服务(只要这意味着添加标头或其他参数)。
【问题讨论】: