Header、フォームでエンコードされたフィールド、およびJSONボディを含めるリクエストを作成しようとしています。私のレトロフィットインターフェースは次のとおりです
@FormUrlEncoded
@POST("/api/register")
Observable<RegisterResponse> register(
@Header("Authorization") String authorization,
@Field("grant_type") String grantType,
@Body RegisterBody body
);
このリクエストを行うと、例外が返されます@Body
パラメータは、フォームまたはマルチパートエンコーディングでは使用できません。
私も@Multipart
注釈:
@Multipart
@FormUrlEncoded
@POST("/api/register")
Observable<RegisterResponse> register(
@Header("Authorization") String authorization,
@Part("grant_type") TypedString grantType,
@Body RegisterBody body
);
IllegalArgumentException
を取得し、許可されるエンコーディングアノテーションは1つだけです。
この投稿は私に正しい方向を示していました https://stackoverflow.com/a/21423093/1446856 。本体にすべてを添付し、TypedInput
として送信します。
したがって、インターフェースは次のようになります
@POST("/api/register")
@Headers({ "Content-Type: application/json;charset=UTF-8"})
Observable<RegisterResponse> register(
@Header("Authorization") String authorization,
@Body TypedInput body
);
体はこんな感じ
String bodyString = jsonBody + "?grant_type=" +
grantType + "&scope=" + scope;
TypedInput requestBody = new TypedByteArray(
"application/json", bodyString.getBytes(Charset.forName("UTF-8")));
多分これは何人かの人々を助けるかもしれません、もしあなたがこの問題を抱えているなら、あなたはインターフェースの@ FormUrlEncodedをすべきです。お役に立てれば。
にフィールドを追加することでこの問題を解決しました
@POST("/api/register")
このような:
@POST("/api/register?grantType=value")
それは良い解決策ではありませんが、役に立つかもしれません。
Json Bodyを含む認証ヘッダーをKotlinのAPIサンプルコードに送信します。
@POST("/api/user/sendlist/")
fun callSendJsonListPost(
@Header("Authheader") header: String,
@Body list: StringBuilder
)
: Observable<EntityModelUserslist>