当前位置: 首页 > 知识库问答 >
问题:

Jersey@FormParam字符串编码,带x-www-form-urlencoded

李烨烁
2023-03-14

我有一个Jersey 2.22 rest web服务,我的一个endpoint有以下签名:

@POST
@Path("/query")
public Response doQuery(@FormParam("query") String query) { ... }

我使用PostMan调用这个web服务,在post请求中不传递任何特定的头,我将“query”form param传递为“x-www-form-urlencoded”。

jersey应用程序由Tomcat 7托管,该Tomcat 7以JVM编码UTF-8文件启动。编码UTF-8,并将连接器的URIEncoding设置为UTF-8。

如果通过邮递员发送的字符串是“

如果我在方法的开头添加以下内容,一切都会很好:

String query2 = new String(query.getBytes("ISO-8859-1"), "UTF-8");

我查看了用于编码的Forms规范,我发现对于解码请求,客户端应该发送一个名为“charset”的隐藏参数,该参数将覆盖默认值(US ASCII),但是我尝试将此值添加为标头和另一个条目在x-www-form-urlencoded参数中,但泽西似乎忽略了它们。

目前也可以使用上面的解决方法,但我想确保这将始终适用于泽西,但是我更喜欢有一种更安全的方式,基本上让泽西从一开始就正确解释编码,即使这包括强制客户端以不同的方式调用我的服务(只要它意味着添加标头或其他参数)。

共有1个答案

公孙胡媚
2023-03-14

解决方案是传递标题“content type:application/x-www-form-urlencoded;charset-utf-8”,我确实尝试过使用PostMan,但我发现,基本上,PostMan在使用post方法并选择“x-www-form-urlencoded”单选按钮选项时忽略了标题内容类型。

使用cUrl和

-H"内容类型:应用程序/x-www-form-urlencoded;charset=UTF-8"

做了工作。

 类似资料:
  • 我在研究Xamarin。Android应用。我必须使用内容类型为x-www-form-urlencoded的rest API。我无法成功调用Rest API,在此之前,我使用了许多web服务,但我第一次使用这种类型的API。我被困在这里面了。我尝试了两种方法来消耗它: 下一个问题是:

  • 我试图使用以下客户端代码调用REST服务,目的是发送一些字符串消息详细信息以及附件文件: 我的目标服务器接受Base64编码的内容,这就是为什么额外的从文件传输到ByteArray的原因。 此外,我发现类com.sun.jersey.core.impl.provider.entity.FormProvider用于生产和消费“x-www-form-urlencoded”请求。 但我还是得出了以下结论

  • 我有一根弦 我需要将其转换为x-www-form-urlencoded格式。 如果我使用在Java中,函数将字符串转换为 但当我以x-www-form-urlencoded的形式从邮递员那里发送请求时,得到的请求是 为什么会有这种差异?我还需要发送请求,因为它在postman中是完全相同的(第二个编码字符串),然后只有我得到了回复。如何将字符串编码为第二种格式?

  • 问题内容: 我的印象是,使用x-www-form-urlencoded规范的POSTS应该在帖子正文中发送URL编码的参数字符串。但是,当我这样做时 接收端的请求主体如下所示: 但我期望得到这个 我如何获得请求以第二种形式发送数据? 问题答案: 获得JSON的原因是因为您显式调用以生成JSON字符串。只是不这样做,您就不会得到JSON字符串。换句话说,将第一行更改为: 正如文档所解释的,如果将di

  • 我在这里使用了这个很棒的资源--https://forums.aws.amazon.com/thread.jspa?messageid=673012--但是如果数据中有空字段(我会这样做,这超出了我的控制),它会抛出一个内部服务器错误。 然后从Christian E Willman-https://github.com/christianewillman/aws-api-gateway-bodyP

  • 我正在尝试为我的网站创建一个简单的登录功能。我使用JAVA作为后端,并尝试使用restservices。我的学校给了我一个带有身份验证的登录系统的例子。不幸的是,我遇到了这个错误:java。lang.IllegalStateException:当请求实体的内容类型不是application/x-www-form-urlencoded]时,使用@FormParam。