Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用android注释和resttemplate发送POST请求体中编码的x-www-form-Url_Java_Android_Spring_Resttemplate_Android Annotations - Fatal编程技术网

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
    实例中可用
  • 希望这有帮助

  • 确保在转换器列表中包含FormHttpMessageConverter.class
  • 使用多值映射实现(如LinkedMultiValueMap)或使Param类扩展LinkedMultiValueMap,而不是使用Param类型发送数据
  • 扩展LinkedMultiValueMap的示例:

    @Rest(转换器={FormHttpMessageConverter.class,MappingJacksonHttpMessageConverter.class})
    公共接口RestClient扩展RestClientRootUrl{
    @Post(“/登录”)
    LoginResponse登录(LoginRequest LoginRequest);
    }
    公共类LoginRequest扩展了LinkedMultiValueMap{
    公共登录请求(字符串用户名、字符串密码){
    添加(“用户名”,用户名);
    添加(“密码”,密码);
    }
    }
    
    您可以有多个转换器,因为它将根据传入的对象为您选择一个转换器。也就是说,如果您传入一个多值映射,出于某种原因,它会将其添加到标题中,因为Android注释会创建一个HttpEntity。如果您按照李嘉图的建议扩展多值映射,它将起作用