Android 使用包含参数的json对象改装POST

Android 使用包含参数的json对象改装POST,android,json,gson,retrofit,Android,Json,Gson,Retrofit,我正在使用改装向我的服务器发送POST请求: @POST("/login") void login( @Body User user ,Callback<User> callback); 我需要做什么才能让我的参数像这样发送 {"user" : {"email":"example@test.com","password":"asdfasdf"} } 编辑:使用自定义的JsonSerializer,选择正确的方法: public class CustomGsonAdapter {

我正在使用改装向我的服务器发送
POST
请求:

@POST("/login")
void login( @Body User user ,Callback<User> callback);
我需要做什么才能让我的参数像这样发送

{"user" :  {"email":"example@test.com","password":"asdfasdf"} }

编辑:使用自定义的
JsonSerializer
,选择正确的方法:

public class CustomGsonAdapter {
    public static class UserAdapter implements JsonSerializer<User> {
        public JsonElement serialize(User user, Type typeOfSrc,
                                     JsonSerializationContext context) {
            Gson gson = new Gson();
            JsonElement je = gson.toJsonTree(user);
            JsonObject jo = new JsonObject();
            jo.add("user", je);
            return jo;
        }
    }
}

解决问题的最简单模式是创建RequestPOJO类,例如:

文件User.java:

public class User{
    public String email;
    public String password;
}
文件LoginRequestPojo.java:

public class LoginRequestPojo{
    public User user;

    public LoginRequestPojo(User user){
        this.user = user;
    }
}
并且,在您的改装2请求中:

@POST("/login")
void login( @Body LoginRequestPojo requestPojo, Callback<User> callback);
@POST(“/login”)
无效登录(@Body LoginRequestPojo requestPojo,回调);
最后,您的请求主体:


{“用户”:{“电子邮件”:someone@something.com“,”password“:“123123”
}}

您能将您的代码粘贴到您实际进行登录调用的位置吗,您是如何传入用户对象的?您好@Noble6,格式是我评论中的最后一行代码,但我学会了正确的方法,使用了自定义gson转换器,谢谢您的提问@KayanAlmeida我也希望做同样的事情。您是否有任何关于如何使用自定义转换器执行此操作的示例代码?@kayanameida。谢谢这绝对是一条路!谢谢,我以前也这么做过,如果你在版本与你的类似之前检查我的答案,但这不是推荐的方式,因为它创建了一个几乎不起任何作用的
类。更好的方法是将所有与JSON相关的处理集中在
GsonAdapter
中,或者也可以将Jackson与注释一起使用:)你不是在创建一个类来解决这个问题吗?为什么用一个更复杂的类来解决同样的问题是更好的方法呢?我还想使用下面的改型{“params”:{“email”:nilhr@gamil.com你能给我一段代码吗
public class LoginRequestPojo{
    public User user;

    public LoginRequestPojo(User user){
        this.user = user;
    }
}
@POST("/login")
void login( @Body LoginRequestPojo requestPojo, Callback<User> callback);