繁体   English   中英

使用Retrofit2,无法在POST请求中发送JSON正文

[英]With Retrofit2, unable to send JSON body in POST request

我正在使用以下代码通过POST方法和原始JsonObject作为主体来实现API。

public interface PostRawJsonService {
    @POST
    Call<Model> submitData(@Url String url, @HeaderMap Map<String, String> headers, @Body Email email);
}

电子邮件模型为:

public class Email {
    private String email;

    public Email(String email) {
        this.email = email;
    }
}

我这样称呼它:

Email email= new Email("team@gmail.com");
Call<Model> call = service.submitData(url, headers, email);

这不起作用,代码似乎卡在Call<Model> call = service.submitData(url, headers, email); 第行,日志也不显示任何错误。 可能是什么问题?

当我打印请求时,它如下:

{   "body": {
    "contentType": {
      "mediaType": "application/json",
      "subtype": "json",
      "type": "application"
    }   },   "headers": {
    "namesAndValues": [
      "Authorization",
      "xyz"
    ]   },   "method": "POST",   "url": {
    "host": "my.company.com",
    "password": "",
    "pathSegments": [
      "data",
      "next",
      "email"
    ],
    "port": 443,
    "scheme": "https",
    "url": "https://my.company.com/data/next/email",
    "username": ""   } }

在Email类中创建getter和setter方法:

public class Email {
    private String email;

    public Email(String email) {
        this.email = email;
    }

    public String getEmail(){
      return this.email;
    }

    public void setEmail(String email){
      this.email = email;
    }
}
HashMap<String, String> headerMap = new HashMap<>();
headerMap.put("SessionID", "Session");
headerMap.put("UserName", "Username");
headerMap.put("Content-Type", "application/json");

OkHttpClient httpClient = // Create OkHttpClient

我使用这种方法来获取httpclient:

public OkHttpClient addHeaders(final HashMap<String, String> headerMap) {
    return new OkHttpClient.Builder()
            .addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request.Builder builder = chain.request().newBuilder();
                    Set<String> keySets = headerMap.keySet();
                    for (String key : keySets) {
                        builder.addHeader(key, headerMap.get(key));
                    }
                    return chain.proceed(builder.build());
                }
            })
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .build();
}

PostRawJsonService service = ConnectToService
        .newInstance()
        .getClient(httpClient).create(PostRawJsonService.class);

这里的ConnectToService是我用于创建改造的通用类。 您可以在自己正在使用的班级中使用它。

通过将主体放在前面并指向下一个网址来进行服务:

Call<Model> call = service.submitData(email, url);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM