@Test public void fieldMapRejectsNull() { class Example { @FormUrlEncoded // @POST("/") // Call<ResponseBody> method(@FieldMap Map<String, Object> a) { return null; } } try { buildRequest(Example.class, new Object[] { null }); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Field map was null."); } }
@Test public void fieldMapRejectsNullKeys() { class Example { @FormUrlEncoded // @POST("/") // Call<ResponseBody> method(@FieldMap Map<String, Object> a) { return null; } } Map<String, Object> fieldMap = new LinkedHashMap<>(); fieldMap.put("kit", "kat"); fieldMap.put(null, "pong"); try { buildRequest(Example.class, fieldMap); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Field map contained null key."); } }
@Test public void fieldMapRejectsNullValues() { class Example { @FormUrlEncoded // @POST("/") // Call<ResponseBody> method(@FieldMap Map<String, Object> a) { return null; } } Map<String, Object> fieldMap = new LinkedHashMap<>(); fieldMap.put("kit", "kat"); fieldMap.put("foo", null); try { buildRequest(Example.class, fieldMap); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Field map contained null value for key 'foo'."); } }
@Test public void fieldMapMustBeAMap() { class Example { @FormUrlEncoded // @POST("/") // Call<ResponseBody> method(@FieldMap List<String> a) { return null; } } try { buildRequest(Example.class); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage( "@FieldMap parameter type must be Map. (parameter #1)\n for method Example.method"); } }
@Test public void fieldMapSupportsSubclasses() throws IOException { class Foo extends HashMap<String, String> { } class Example { @FormUrlEncoded // @POST("/") // Call<ResponseBody> method(@FieldMap Foo a) { return null; } } Foo foo = new Foo(); foo.put("hello", "world"); Request request = buildRequest(Example.class, foo); Buffer buffer = new Buffer(); request.body().writeTo(buffer); assertThat(buffer.readUtf8()).isEqualTo("hello=world"); }
@Test public void fieldParamMapsConvertedToNullShouldError() throws Exception { class Example { @FormUrlEncoded @POST("/query") Call<ResponseBody> queryPath(@FieldMap Map<String, String> a) { return null; } } Retrofit.Builder retrofitBuilder = new Retrofit.Builder() .baseUrl("http://example.com") .addConverterFactory(new NullObjectConverterFactory()); Map<String, String> queryMap = Collections.singletonMap("kit", "kat"); try { buildRequest(Example.class, retrofitBuilder, queryMap); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessageContaining( "Field map value 'kat' converted to null by retrofit2.helpers.NullObjectConverterFactory$1 for key 'kit'."); } }
@Test public void implicitFormEncodingByFieldMapForbidden() { class Example { @POST("/") // Call<ResponseBody> method(@FieldMap Map<String, String> a) { return null; } } try { buildRequest(Example.class); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage( "@FieldMap parameters can only be used with form encoding. (parameter #1)\n for method Example.method"); } }
@FormUrlEncoded @POST(Constant.URL_LOGIN) Observable<ResponseBody> login(@FieldMap Map<String, String> map);
@FormUrlEncoded Observable<ResponseBody> getToken(@Url String url, @FieldMap Map<String, String> map);
@FormUrlEncoded Observable<ResponseBody> getUserInfo(@Url String url, @FieldMap Map<String, String> map);
@FormUrlEncoded @POST() Observable<ResponseBody> post(@Url() String url, @FieldMap Map<String, String> maps);
/** * 登录 */ @FormUrlEncoded @POST(BaseApi.Url.URL_LOGIN) Observable<JSONObject> login(@FieldMap Map<String, String> map);
/** * 登出 */ @FormUrlEncoded @POST(BaseApi.Url.URL_API_LOGIN) Observable<Model1<UserModel>> logout(@FieldMap Map<String, String> map);
/** * 注册 */ @FormUrlEncoded @POST(BaseApi.Url.URL_REGISTER) Observable<JSONObject> register(@FieldMap Map<String, String> map);
/** * 注册 */ @FormUrlEncoded @POST(BaseApi.Url.URL_GET_NICK_NAME) Observable<UserModel> getNickname(@FieldMap Map<String, String> map);
/** * 登录 */ @FormUrlEncoded @POST(BaseApi.Url.URL_REGISTER) Observable<JSONObject> login(@FieldMap Map<String, String> map);
@FormUrlEncoded @POST("oauth/token") Call<AccessToken> requestToken(@FieldMap Map<String, String> tokenRequest);
@FormUrlEncoded @PATCH() Observable<ResponseBody> patch(@Url() String url, @FieldMap Map<String, String> maps);
@FormUrlEncoded @POST() Observable<ResponseBody> postForm(@Url() String url, @FieldMap Map<String, Object> maps);
@FormUrlEncoded @PUT() Observable<ResponseBody> put(@Url() String url, @FieldMap Map<String, String> maps);
@FormUrlEncoded @DELETE() Observable<ResponseBody> delete(@Url() String url, @FieldMap Map<String, String> maps);
@POST() @FormUrlEncoded Observable<ResponseBody> post(@Url() String url, @FieldMap Map<String, String> maps);
@POST() @FormUrlEncoded Flowable<ResponseBody> executePost( @Url() String url, @FieldMap Map<String, Object> maps);
@FormUrlEncoded @POST() Flowable<ResponseBody> postForm( @Url() String url, @FieldMap Map<String, Object> maps);
@POST() @FormUrlEncoded Observable<ResponseBody> post(@Url String url, @FieldMap Map<String, String> maps);
@POST("{path}") @FormUrlEncoded Observable<ApiResult<AuthModel>> login(@Path("path") String path, @FieldMap Map<String, String> map);
/** * { "status": 0, "msg": "success", "result": 5 } */ @FormUrlEncoded @POST("req/{iconpack}") Call<ResResBean<Integer>> reqRedraw(@Path("iconpack") String iconPack, @FieldMap Map<String, String> fields);
@FormUrlEncoded @POST Call<String> post(@Url String url, @FieldMap Map<String, Object> params);