次のjsonをレトロフィット2で送信する必要があります。
_{
"Inspection": {
"UUID": "name",
"ModifiedTime": "2016-03-09T01:13",
"CreatedTime": "2016-03-09T01:13",
"ReviewedWith": "name2",
"Type": 1,
"Project": {
"Id": 41
},
"ActionTypes": [1]
}
}
_
ヘッダーあり:_Authorization: access_token_value
_
私はこれを試しました:
_//header parameter
String accessToken = Requests.getAccessToken();
JsonObject obj = new JsonObject();
JsonObject inspection = new JsonObject();
inspection.addProperty("UUID","name");
inspection.addProperty("ModifiedTime","2016-03-09T01:13");
inspection.addProperty("CreatedTime","2016-03-09T01:13");
inspection.addProperty("ReviewedWith","name2");
inspection.addProperty("Type","1");
JsonObject project = new JsonObject();
project.addProperty("Id", 41);
inspection.add("Project", project);
obj.add("Inspection", inspection);
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(Constants.ROOT_API_URL)
.addConverterFactory(GsonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.build();
IConstructSecureAPI service = restAdapter.create(IConstructSecureAPI.class);
Call<JsonElement> result = service.addInspection(accessToken, obj);
JsonElement element = result.execute().body();
_
しかし、例外を受け取るたびに:Java.lang.IllegalArgumentException: Unable to create @Body converter for class com.google.gson.JsonObject (parameter #2)
どうすれば送信できますか?または私がそれをどのように行うことができるか別のアイデア。 jsonを内部に含む単純なString
のパラメーターを提供することもできます。それは私に合います
ソリューション:次のインターフェースで本体の値を宣言します。
_@Body RequestBody body
_およびラップ文字列JSONオブジェクト:
RequestBody body = RequestBody.create(MediaType.parse("application/json"), obj.toString());
Body
単一のリクエストオブジェクトを使用し、リクエストオブジェクトを次のように宣言します
class Inspection {
String UUID;
//..... add your fields
Project project;
}
class Product
{
int Id;
//....... add your fields
}
私はあなたのサービスIConstructSecureAPI
エンドポイントが次のとおりであることを想定しています:
@GET(...) // change based on your api GET/POST
Call<Response> addInspection(
@Header("Authorization") String accesstoken,
@Body Inspection request
);
そしてあなたはあなたの欲望を宣言することができますResponse
。
これをチェックしてください answer 、クラスの代わりにHashMap
を使用します。
このようなレトロフィットを作成するときにコンバータを指定できます
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseurl)
.client(okHttpClient)
.build();
インターセプターを使用して、各リクエストで承認ヘッダーを送信できます
class AuthorizationInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
String authorizationToken = AuthenticationUtils.getToken();
Request authorizedRequest = originalRequest.newBuilder()
.header("Authorization", authorizationToken)
.build();
return chain.proceed(authorizedRequest);
}
}
複数の変数/フィールド/タグに対して同じ@SerializedName( "")を維持する可能性があります