From 1e6581f278bd189906db578e33e054b4796bcea8 Mon Sep 17 00:00:00 2001 From: Prateek Srivastava Date: Sun, 10 Jan 2016 17:20:31 -0800 Subject: [PATCH] Supply method annotations to factory when invoking requestBodyConverter method. --- .../adapter/guava/StringConverterFactory.java | 5 ++- .../adapter/java8/StringConverterFactory.java | 5 ++- .../rxjava/StringConverterFactory.java | 2 +- .../converter/gson/GsonConverterFactory.java | 4 +-- .../jackson/JacksonConverterFactory.java | 4 +-- .../moshi/MoshiConverterFactory.java | 4 +-- .../protobuf/ProtoConverterFactory.java | 4 +-- .../scalars/ScalarsConverterFactory.java | 5 ++- .../simplexml/SimpleXmlConverterFactory.java | 4 +-- .../converter/wire/WireConverterFactory.java | 4 +-- .../java/retrofit2/BuiltInConverters.java | 4 +-- .../src/main/java/retrofit2/Converter.java | 4 +-- .../java/retrofit2/RequestFactoryParser.java | 16 ++++++--- .../src/main/java/retrofit2/Retrofit.java | 13 ++++--- .../src/test/java/retrofit2/CallTest.java | 6 ++-- .../src/test/java/retrofit2/RetrofitTest.java | 35 +++++++++++-------- .../helpers/NonMatchingConverterFactory.java | 5 ++- .../helpers/ToStringConverterFactory.java | 2 +- .../example/retrofit/ChunkingConverter.java | 8 ++--- .../retrofit/JsonAndXmlConverters.java | 13 +++---- .../example/retrofit/JsonQueryParameters.java | 2 +- 21 files changed, 82 insertions(+), 67 deletions(-) diff --git a/retrofit-adapters/guava/src/test/java/retrofit2/adapter/guava/StringConverterFactory.java b/retrofit-adapters/guava/src/test/java/retrofit2/adapter/guava/StringConverterFactory.java index c7f6a77f..bb9ccf18 100644 --- a/retrofit-adapters/guava/src/test/java/retrofit2/adapter/guava/StringConverterFactory.java +++ b/retrofit-adapters/guava/src/test/java/retrofit2/adapter/guava/StringConverterFactory.java @@ -35,9 +35,8 @@ final class StringConverterFactory extends Converter.Factory { }; } - @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + @Override public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { return RequestBody.create(MediaType.parse("text/plain"), value); diff --git a/retrofit-adapters/java8/src/test/java/retrofit2/adapter/java8/StringConverterFactory.java b/retrofit-adapters/java8/src/test/java/retrofit2/adapter/java8/StringConverterFactory.java index 2f08f5b7..de4b63e6 100644 --- a/retrofit-adapters/java8/src/test/java/retrofit2/adapter/java8/StringConverterFactory.java +++ b/retrofit-adapters/java8/src/test/java/retrofit2/adapter/java8/StringConverterFactory.java @@ -35,9 +35,8 @@ final class StringConverterFactory extends Converter.Factory { }; } - @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + @Override public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { return RequestBody.create(MediaType.parse("text/plain"), value); diff --git a/retrofit-adapters/rxjava/src/test/java/retrofit2/adapter/rxjava/StringConverterFactory.java b/retrofit-adapters/rxjava/src/test/java/retrofit2/adapter/rxjava/StringConverterFactory.java index ac3388a8..c44038d0 100644 --- a/retrofit-adapters/rxjava/src/test/java/retrofit2/adapter/rxjava/StringConverterFactory.java +++ b/retrofit-adapters/rxjava/src/test/java/retrofit2/adapter/rxjava/StringConverterFactory.java @@ -36,7 +36,7 @@ final class StringConverterFactory extends Converter.Factory { } @Override public Converter requestBodyConverter(Type type, - Annotation[] annotations, Retrofit retrofit) { + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { return RequestBody.create(MediaType.parse("text/plain"), value); diff --git a/retrofit-converters/gson/src/main/java/retrofit2/converter/gson/GsonConverterFactory.java b/retrofit-converters/gson/src/main/java/retrofit2/converter/gson/GsonConverterFactory.java index b6bd0b5b..72a8df7f 100644 --- a/retrofit-converters/gson/src/main/java/retrofit2/converter/gson/GsonConverterFactory.java +++ b/retrofit-converters/gson/src/main/java/retrofit2/converter/gson/GsonConverterFactory.java @@ -65,8 +65,8 @@ public final class GsonConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { TypeAdapter adapter = gson.getAdapter(TypeToken.get(type)); return new GsonRequestBodyConverter<>(gson, adapter); } diff --git a/retrofit-converters/jackson/src/main/java/retrofit2/converter/jackson/JacksonConverterFactory.java b/retrofit-converters/jackson/src/main/java/retrofit2/converter/jackson/JacksonConverterFactory.java index 2fe4bb9f..f6db311b 100644 --- a/retrofit-converters/jackson/src/main/java/retrofit2/converter/jackson/JacksonConverterFactory.java +++ b/retrofit-converters/jackson/src/main/java/retrofit2/converter/jackson/JacksonConverterFactory.java @@ -61,8 +61,8 @@ public final class JacksonConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { JavaType javaType = mapper.getTypeFactory().constructType(type); ObjectWriter writer = mapper.writerWithType(javaType); return new JacksonRequestBodyConverter<>(writer); diff --git a/retrofit-converters/moshi/src/main/java/retrofit2/converter/moshi/MoshiConverterFactory.java b/retrofit-converters/moshi/src/main/java/retrofit2/converter/moshi/MoshiConverterFactory.java index 63af0dfb..1a98a78a 100644 --- a/retrofit-converters/moshi/src/main/java/retrofit2/converter/moshi/MoshiConverterFactory.java +++ b/retrofit-converters/moshi/src/main/java/retrofit2/converter/moshi/MoshiConverterFactory.java @@ -58,8 +58,8 @@ public final class MoshiConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { JsonAdapter adapter = moshi.adapter(type); return new MoshiRequestBodyConverter<>(adapter); } diff --git a/retrofit-converters/protobuf/src/main/java/retrofit2/converter/protobuf/ProtoConverterFactory.java b/retrofit-converters/protobuf/src/main/java/retrofit2/converter/protobuf/ProtoConverterFactory.java index 960eb1ad..aa4420c9 100644 --- a/retrofit-converters/protobuf/src/main/java/retrofit2/converter/protobuf/ProtoConverterFactory.java +++ b/retrofit-converters/protobuf/src/main/java/retrofit2/converter/protobuf/ProtoConverterFactory.java @@ -60,8 +60,8 @@ public final class ProtoConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (!(type instanceof Class)) { return null; } diff --git a/retrofit-converters/scalars/src/main/java/retrofit2/converter/scalars/ScalarsConverterFactory.java b/retrofit-converters/scalars/src/main/java/retrofit2/converter/scalars/ScalarsConverterFactory.java index 13d685d5..19fb3ca8 100644 --- a/retrofit-converters/scalars/src/main/java/retrofit2/converter/scalars/ScalarsConverterFactory.java +++ b/retrofit-converters/scalars/src/main/java/retrofit2/converter/scalars/ScalarsConverterFactory.java @@ -43,9 +43,8 @@ public final class ScalarsConverterFactory extends Converter.Factory { private ScalarsConverterFactory() { } - @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + @Override public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (type == String.class || type == boolean.class || type == Boolean.class diff --git a/retrofit-converters/simplexml/src/main/java/retrofit2/converter/simplexml/SimpleXmlConverterFactory.java b/retrofit-converters/simplexml/src/main/java/retrofit2/converter/simplexml/SimpleXmlConverterFactory.java index b42f9271..b7563455 100644 --- a/retrofit-converters/simplexml/src/main/java/retrofit2/converter/simplexml/SimpleXmlConverterFactory.java +++ b/retrofit-converters/simplexml/src/main/java/retrofit2/converter/simplexml/SimpleXmlConverterFactory.java @@ -75,8 +75,8 @@ public final class SimpleXmlConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (!(type instanceof Class)) { return null; } diff --git a/retrofit-converters/wire/src/main/java/retrofit2/converter/wire/WireConverterFactory.java b/retrofit-converters/wire/src/main/java/retrofit2/converter/wire/WireConverterFactory.java index fd3ead90..fbaaeac4 100644 --- a/retrofit-converters/wire/src/main/java/retrofit2/converter/wire/WireConverterFactory.java +++ b/retrofit-converters/wire/src/main/java/retrofit2/converter/wire/WireConverterFactory.java @@ -53,8 +53,8 @@ public final class WireConverterFactory extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (!(type instanceof Class)) { return null; } diff --git a/retrofit/src/main/java/retrofit2/BuiltInConverters.java b/retrofit/src/main/java/retrofit2/BuiltInConverters.java index de870eff..b7983035 100644 --- a/retrofit/src/main/java/retrofit2/BuiltInConverters.java +++ b/retrofit/src/main/java/retrofit2/BuiltInConverters.java @@ -39,8 +39,8 @@ final class BuiltInConverters extends Converter.Factory { } @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (RequestBody.class.isAssignableFrom(Types.getRawType(type))) { return RequestBodyConverter.INSTANCE; } diff --git a/retrofit/src/main/java/retrofit2/Converter.java b/retrofit/src/main/java/retrofit2/Converter.java index ee7fe448..9fd8edda 100644 --- a/retrofit/src/main/java/retrofit2/Converter.java +++ b/retrofit/src/main/java/retrofit2/Converter.java @@ -57,8 +57,8 @@ public interface Converter { * specified by {@link Body @Body}, {@link Part @Part}, and {@link PartMap @PartMap} * values. */ - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return null; } diff --git a/retrofit/src/main/java/retrofit2/RequestFactoryParser.java b/retrofit/src/main/java/retrofit2/RequestFactoryParser.java index 2259d342..9d92b85b 100644 --- a/retrofit/src/main/java/retrofit2/RequestFactoryParser.java +++ b/retrofit/src/main/java/retrofit2/RequestFactoryParser.java @@ -201,6 +201,7 @@ final class RequestFactoryParser { private void parseParameters(Retrofit retrofit) { Type[] methodParameterTypes = method.getGenericParameterTypes(); + Annotation[] methodAnnotations = method.getAnnotations(); Annotation[][] methodParameterAnnotationArrays = method.getParameterAnnotations(); boolean gotField = false; @@ -429,16 +430,19 @@ final class RequestFactoryParser { ParameterizedType parameterizedType = (ParameterizedType) methodParameterType; Type iterableType = Utils.getParameterUpperBound(0, parameterizedType); Converter valueConverter = - retrofit.requestBodyConverter(iterableType, methodParameterAnnotations); + retrofit.requestBodyConverter(iterableType, methodParameterAnnotations, + methodAnnotations); action = new RequestAction.Part<>(headers, valueConverter).iterable(); } else if (rawParameterType.isArray()) { Class arrayComponentType = boxIfPrimitive(rawParameterType.getComponentType()); Converter valueConverter = - retrofit.requestBodyConverter(arrayComponentType, methodParameterAnnotations); + retrofit.requestBodyConverter(arrayComponentType, methodParameterAnnotations, + methodAnnotations); action = new RequestAction.Part<>(headers, valueConverter).array(); } else { Converter valueConverter = - retrofit.requestBodyConverter(methodParameterType, methodParameterAnnotations); + retrofit.requestBodyConverter(methodParameterType, methodParameterAnnotations, + methodAnnotations); action = new RequestAction.Part<>(headers, valueConverter); } @@ -464,7 +468,8 @@ final class RequestFactoryParser { } Type valueType = Utils.getParameterUpperBound(1, parameterizedType); Converter valueConverter = - retrofit.requestBodyConverter(valueType, methodParameterAnnotations); + retrofit.requestBodyConverter(valueType, methodParameterAnnotations, + methodAnnotations); PartMap partMap = (PartMap) methodParameterAnnotation; action = new RequestAction.PartMap<>(valueConverter, partMap.encoding()); @@ -482,7 +487,8 @@ final class RequestFactoryParser { Converter converter; try { converter = - retrofit.requestBodyConverter(methodParameterType, methodParameterAnnotations); + retrofit.requestBodyConverter(methodParameterType, methodParameterAnnotations, + methodAnnotations); } catch (RuntimeException e) { // Wide exception range because factories are user code. throw parameterError(e, i, "Unable to create @Body converter for %s", methodParameterType); diff --git a/retrofit/src/main/java/retrofit2/Retrofit.java b/retrofit/src/main/java/retrofit2/Retrofit.java index 7a73f3d4..0bc98b2d 100644 --- a/retrofit/src/main/java/retrofit2/Retrofit.java +++ b/retrofit/src/main/java/retrofit2/Retrofit.java @@ -243,8 +243,9 @@ public final class Retrofit { * * @throws IllegalArgumentException if no converter available for {@code type}. */ - public Converter requestBodyConverter(Type type, Annotation[] annotations) { - return nextRequestBodyConverter(null, type, annotations); + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations) { + return nextRequestBodyConverter(null, type, parameterAnnotations, methodAnnotations); } /** @@ -254,14 +255,16 @@ public final class Retrofit { * @throws IllegalArgumentException if no converter available for {@code type}. */ public Converter nextRequestBodyConverter(Converter.Factory skipPast, - Type type, Annotation[] annotations) { + Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations) { checkNotNull(type, "type == null"); - checkNotNull(annotations, "annotations == null"); + checkNotNull(parameterAnnotations, "parameterAnnotations == null"); + checkNotNull(methodAnnotations, "methodAnnotations == null"); int start = converterFactories.indexOf(skipPast) + 1; for (int i = start, count = converterFactories.size(); i < count; i++) { + Converter.Factory factory = converterFactories.get(i); Converter converter = - converterFactories.get(i).requestBodyConverter(type, annotations, this); + factory.requestBodyConverter(type, parameterAnnotations, methodAnnotations, this); if (converter != null) { //noinspection unchecked return (Converter) converter; diff --git a/retrofit/src/test/java/retrofit2/CallTest.java b/retrofit/src/test/java/retrofit2/CallTest.java index 3de523a4..e19d25c9 100644 --- a/retrofit/src/test/java/retrofit2/CallTest.java +++ b/retrofit/src/test/java/retrofit2/CallTest.java @@ -195,7 +195,8 @@ public final class CallTest { .baseUrl(server.url("/")) .addConverterFactory(new ToStringConverterFactory() { @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { @@ -221,7 +222,8 @@ public final class CallTest { .baseUrl(server.url("/")) .addConverterFactory(new ToStringConverterFactory() { @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { diff --git a/retrofit/src/test/java/retrofit2/RetrofitTest.java b/retrofit/src/test/java/retrofit2/RetrofitTest.java index a44d5939..388a8f7c 100644 --- a/retrofit/src/test/java/retrofit2/RetrofitTest.java +++ b/retrofit/src/test/java/retrofit2/RetrofitTest.java @@ -330,14 +330,18 @@ public final class RetrofitTest { assertThat(annotations).hasAtLeastOneElementOfType(Annotated.Foo.class); } - @Test public void parameterAnnotationsPassedToRequestBodyConverter() { - final AtomicReference annotationsRef = new AtomicReference<>(); + @Test public void methodAndParameterAnnotationsPassedToRequestBodyConverter() { + final AtomicReference parameterAnnotationsRef = new AtomicReference<>(); + final AtomicReference methodAnnotationsRef = new AtomicReference<>(); + class MyConverterFactory extends Converter.Factory { @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { - annotationsRef.set(annotations); - return new ToStringConverterFactory().requestBodyConverter(type, annotations, retrofit); + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { + parameterAnnotationsRef.set(parameterAnnotations); + methodAnnotationsRef.set(methodAnnotations); + return new ToStringConverterFactory().requestBodyConverter(type, parameterAnnotations, + methodAnnotations, retrofit); } } Retrofit retrofit = new Retrofit.Builder() @@ -347,8 +351,8 @@ public final class RetrofitTest { Annotated annotated = retrofit.create(Annotated.class); annotated.bodyParameter(null); // Trigger internal setup. - Annotation[] annotations = annotationsRef.get(); - assertThat(annotations).hasAtLeastOneElementOfType(Annotated.Foo.class); + assertThat(parameterAnnotationsRef.get()).hasAtLeastOneElementOfType(Annotated.Foo.class); + assertThat(methodAnnotationsRef.get()).hasAtLeastOneElementOfType(POST.class); } @Test public void parameterAnnotationsPassedToStringConverter() { @@ -786,7 +790,8 @@ public final class RetrofitTest { @Test public void requestConverterFactoryQueried() { Type type = String.class; - Annotation[] annotations = new Annotation[0]; + Annotation[] parameterAnnotations = new Annotation[0]; + Annotation[] methodAnnotations = new Annotation[1]; Converter expectedAdapter = mock(Converter.class); Converter.Factory factory = mock(Converter.Factory.class); @@ -796,12 +801,14 @@ public final class RetrofitTest { .addConverterFactory(factory) .build(); - doReturn(expectedAdapter).when(factory).requestBodyConverter(type, annotations, retrofit); + doReturn(expectedAdapter).when(factory).requestBodyConverter(type, parameterAnnotations, + methodAnnotations, retrofit); - Converter actualAdapter = retrofit.requestBodyConverter(type, annotations); + Converter actualAdapter = retrofit.requestBodyConverter(type, + parameterAnnotations, methodAnnotations); assertThat(actualAdapter).isSameAs(expectedAdapter); - verify(factory).requestBodyConverter(type, annotations, retrofit); + verify(factory).requestBodyConverter(type, parameterAnnotations, methodAnnotations, retrofit); verifyNoMoreInteractions(factory); } @@ -817,7 +824,7 @@ public final class RetrofitTest { .build(); try { - retrofit.requestBodyConverter(type, annotations); + retrofit.requestBodyConverter(type, annotations, annotations); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("" @@ -844,7 +851,7 @@ public final class RetrofitTest { .build(); try { - retrofit.nextRequestBodyConverter(nonMatchingFactory1, type, annotations); + retrofit.nextRequestBodyConverter(nonMatchingFactory1, type, annotations, annotations); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("" diff --git a/retrofit/src/test/java/retrofit2/helpers/NonMatchingConverterFactory.java b/retrofit/src/test/java/retrofit2/helpers/NonMatchingConverterFactory.java index 6b86e794..34383994 100644 --- a/retrofit/src/test/java/retrofit2/helpers/NonMatchingConverterFactory.java +++ b/retrofit/src/test/java/retrofit2/helpers/NonMatchingConverterFactory.java @@ -32,9 +32,8 @@ public final class NonMatchingConverterFactory extends Converter.Factory { return null; } - @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + @Override public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { called = true; return null; } diff --git a/retrofit/src/test/java/retrofit2/helpers/ToStringConverterFactory.java b/retrofit/src/test/java/retrofit2/helpers/ToStringConverterFactory.java index a66648cc..0a70e3dd 100644 --- a/retrofit/src/test/java/retrofit2/helpers/ToStringConverterFactory.java +++ b/retrofit/src/test/java/retrofit2/helpers/ToStringConverterFactory.java @@ -41,7 +41,7 @@ public class ToStringConverterFactory extends Converter.Factory { } @Override public Converter requestBodyConverter(Type type, - Annotation[] annotations, Retrofit retrofit) { + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { if (String.class.equals(type)) { return new Converter() { @Override public RequestBody convert(String value) throws IOException { diff --git a/samples/src/main/java/com/example/retrofit/ChunkingConverter.java b/samples/src/main/java/com/example/retrofit/ChunkingConverter.java index 3d3901a6..79067597 100644 --- a/samples/src/main/java/com/example/retrofit/ChunkingConverter.java +++ b/samples/src/main/java/com/example/retrofit/ChunkingConverter.java @@ -49,11 +49,11 @@ public final class ChunkingConverter { */ static class ChunkingConverterFactory extends Converter.Factory { @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { + public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { boolean isBody = false; boolean isChunked = false; - for (Annotation annotation : annotations) { + for (Annotation annotation : parameterAnnotations) { isBody |= annotation instanceof Body; isChunked |= annotation instanceof Chunked; } @@ -63,7 +63,7 @@ public final class ChunkingConverter { // Look up the real converter to delegate to. final Converter delegate = - retrofit.nextRequestBodyConverter(this, type, annotations); + retrofit.nextRequestBodyConverter(this, type, parameterAnnotations, methodAnnotations); // Wrap it in a Converter which removes the content length from the delegate's body. return new Converter() { @Override public RequestBody convert(Object value) throws IOException { diff --git a/samples/src/main/java/com/example/retrofit/JsonAndXmlConverters.java b/samples/src/main/java/com/example/retrofit/JsonAndXmlConverters.java index 04b777b0..2163f3de 100644 --- a/samples/src/main/java/com/example/retrofit/JsonAndXmlConverters.java +++ b/samples/src/main/java/com/example/retrofit/JsonAndXmlConverters.java @@ -74,15 +74,16 @@ public final class JsonAndXmlConverters { return null; } - @Override - public Converter requestBodyConverter(Type type, Annotation[] annotations, - Retrofit retrofit) { - for (Annotation annotation : annotations) { + @Override public Converter requestBodyConverter(Type type, + Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) { + for (Annotation annotation : parameterAnnotations) { if (annotation instanceof Json) { - return jsonFactory.requestBodyConverter(type, annotations, retrofit); + return jsonFactory.requestBodyConverter(type, parameterAnnotations, methodAnnotations, + retrofit); } if (annotation instanceof Xml) { - return jsonFactory.requestBodyConverter(type, annotations, retrofit); + return xmlFactory.requestBodyConverter(type, parameterAnnotations, methodAnnotations, + retrofit); } } return null; diff --git a/samples/src/main/java/com/example/retrofit/JsonQueryParameters.java b/samples/src/main/java/com/example/retrofit/JsonQueryParameters.java index a1609a9d..bc29f835 100644 --- a/samples/src/main/java/com/example/retrofit/JsonQueryParameters.java +++ b/samples/src/main/java/com/example/retrofit/JsonQueryParameters.java @@ -55,7 +55,7 @@ public final class JsonQueryParameters { // you can call retrofit.requestBodyConverter(type, annotations) instead of having a // reference to it explicitly as a field. Converter delegate = - delegateFactory.requestBodyConverter(type, annotations, retrofit); + delegateFactory.requestBodyConverter(type, annotations, new Annotation[0], retrofit); return new DelegateToStringConverter<>(delegate); } } -- GitLab