[英]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.