Android 多个@Body字段出错-改装2 beta3

Android 多个@Body字段出错-改装2 beta3,android,retrofit,retrofit2,Android,Retrofit,Retrofit2,我刚刚开始对android进行改造。尝试为post请求的正文指定2个字段时出错: 找到多个@Body方法批注。(参数#2)用于方法 调用在我的API接口文件中定义为: @POST("auth/login") Call<UserData> login(@Body String username, @Body String password); @POST(“身份验证/登录”) 调用登录(@Body-String用户名,@Body-String密码); 我通过以下方式创建通话: Re

我刚刚开始对android进行改造。尝试为post请求的正文指定2个字段时出错:

找到多个@Body方法批注。(参数#2)用于方法

调用在我的API接口文件中定义为:

@POST("auth/login")
Call<UserData> login(@Body String username, @Body String password);
@POST(“身份验证/登录”)
调用登录(@Body-String用户名,@Body-String密码);
我通过以下方式创建通话:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

APIService service = retrofit.create(APIService.class);
Call<UserData> call = service.login(username, password);
reformation-reformation=new-reformation.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
APIService=reformation.create(APIService.class);
Call=service.login(用户名、密码);
创建调用时生成错误(没有机会执行)。 当我移除其中一个身体区域时,它似乎工作正常


有什么想法吗?

使用多个@Body是个坏主意,因为这里的@Body表示HTML帖子的消息体

(详情:)

我建议您定义一个包含用户名和密码的类,如下所示

public class LoginInformation {
    String username;
    String password;
}
然后,填写关于该类实例的信息,并使用它

@POST("auth/login")
Call<UserData> login(@Body LoginInformation loginInformation);
@POST(“身份验证/登录”)
调用登录(@Body LoginInformation LoginInformation);

任何HTTP请求都只允许包含一个,如果您尝试添加两个
@Body
参数,您将收到此消息
“找到多个@Body方法注释”。

您可以通过以下方式进行修复:

您可以使用
HashMap
或单一类型同时发送多个或不同类型的对象,例如:

HashMap<String, Object> map = new HashMap<>();
map.put("password", "123456");
map.put("username", "Jake Warthon");
如果需要,可以在单个实体中附加更多数据(如不同类型的对象)(可选)

您必须更改请求的主体类型才能接收Hashmap或用户

@POST("auth/login")
Call<UserData> login(@Body HashMap map);
@POST(“身份验证/登录”)
调用登录(@Body HashMap map);

@POST(“身份验证/登录”)
调用登录名(@Body User);
最后,像以前一样将数据传递给服务

Call<UserData> call = service.login(map); 
Call Call=service.login(地图);

Call Call=service.login(用户);
请记住,服务器端必须正确地实现它,才能将数据作为映射接收

@POST("auth/login")
Call<UserData> login(@Body HashMap map);
@POST("auth/login")
Call<UserData> login(@Body User user);
Call<UserData> call = service.login(map); 
Call<UserData> call = service.login(user);