Java 如何使用android注释和resttemplate发送POST请求体中编码的x-www-form-Url
我的界面如下所示:Java 如何使用android注释和resttemplate发送POST请求体中编码的x-www-form-Url,java,android,spring,resttemplate,android-annotations,Java,Android,Spring,Resttemplate,Android Annotations,我的界面如下所示: @Rest(rootUrl = "https://myurl.com", converters = { GsonHttpMessageConverter.class }) public interface CommunicatonInterface { @Get("/tables/login") public Login login(Param param); public RestTemplate getRestTemplate(); } 问题是,我应该把什么作为一个参数
@Rest(rootUrl = "https://myurl.com", converters = { GsonHttpMessageConverter.class })
public interface CommunicatonInterface
{
@Get("/tables/login")
public Login login(Param param);
public RestTemplate getRestTemplate();
}
问题是,我应该把什么作为一个参数,简单地放在身体里:
login=myName&password=myPassword&key=othereKey
没有转义、括号或配额
我试着传递一个字符串,结果得到:
“login=myName&password=myPassword&key=othereKey”
但由于配额符号,它是错误的。如果我理解正确,您希望将表单中的login
和password
参数发布到您的方法中
为此,您应确保执行以下步骤:
login
和password
表单
有一个POST
方法,您实际上不希望在URL中有用户凭据作为get参数,但是如果您的用例需要您这样做,您可以这样做界面
中,不应使用GsonHttpMessageConverter
而应使用FormHttpMessageConverter
。此转换器接受并返回带有application/x-www-form-urlencoded
的内容,这是表单提交的正确内容类型
Param
类应具有与输入文本字段同名的字段。在您的情况下,登录
和密码
。执行此操作后,表单中发布的请求参数将在param
实例中可用@Rest(转换器={FormHttpMessageConverter.class,MappingJacksonHttpMessageConverter.class})
公共接口RestClient扩展RestClientRootUrl{
@Post(“/登录”)
LoginResponse登录(LoginRequest LoginRequest);
}
公共类LoginRequest扩展了LinkedMultiValueMap{
公共登录请求(字符串用户名、字符串密码){
添加(“用户名”,用户名);
添加(“密码”,密码);
}
}
您可以有多个转换器,因为它将根据传入的对象为您选择一个转换器。也就是说,如果您传入一个多值映射,出于某种原因,它会将其添加到标题中,因为Android注释会创建一个HttpEntity。如果您按照李嘉图的建议扩展多值映射,它将起作用