Retrofit Post json 遇到问题

发布于 2022-09-04 04:23:28 字数 334 浏览 31 评论 0

比如这样的接口
http://www.xxx.com/xxx/xxx

post方式传

 token="xxx"
 param="{user:{id:xxx,name:xxx},order:{id:xxx}}"

用retrofit 该怎么传?

我现在的方法
表单形式上传

@Field("token") string token
@Field("param") string param

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

讽刺将军 2022-09-11 04:23:28

将需要请求的数据定义成一个实体类

public class CustomBody {

    public String token;
    public User user;
    public Order order;

    public CustomBody(String token, User user, Order order) {
        this.token = token;
        this.user = user;
        this.order = order;
    }

    public static class Order {
        public String id;

        public Order(String id) {
            this.id = id;
        }
    }

    public static class User {
        public String id;
        public String name;

        public User(String id, String name) {
            this.id = id;
            this.name = name;
        }
    }

}

Retrofit 的 Service 这样子写就可以了,使用 @Body 注解

public interface MyService {

    @POST("/")
    Observable<T> access(@Body CustomBody customBody);
}

使用 HttpLoggingInterceptor 可以在 log 中查看 HTTP 请求的详细情况。

OkHttpClient.interceptors().add(new HttpLoggingInterceptor());
11-19 16:58:46.495 4591-4612/? D/OkHttp: --> POST / HTTP/1.1
11-19 16:58:46.495 4591-4612/? D/OkHttp: {"order":{"id":"1"},"token":"123","user":{"id":"1","name":"name"}}
11-19 16:58:46.495 4591-4612/? D/OkHttp: --> END POST (66-byte body)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文