diff --git a/core/src/test/java/feign/FeignTest.java b/core/src/test/java/feign/FeignTest.java index da114988ca..74cc4792c3 100644 --- a/core/src/test/java/feign/FeignTest.java +++ b/core/src/test/java/feign/FeignTest.java @@ -540,7 +540,8 @@ public void ensureRetryerClonesItself() throws Exception { .errorDecoder(new ErrorDecoder() { @Override public Exception decode(String methodKey, Response response) { - return new RetryableException(response.status(), "play it again sam!", HttpMethod.POST, null); + return new RetryableException(response.status(), "play it again sam!", HttpMethod.POST, + null); } }).target(TestInterface.class, "http://localhost:" + server.getPort()); diff --git a/jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java b/jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java index 4118a3242f..2a6d33f1f5 100644 --- a/jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java +++ b/jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java @@ -154,7 +154,7 @@ protected boolean processAnnotationsOnParameter(MethodMetadata data, String name = QueryParam.class.cast(parameterAnnotation).value(); checkState(emptyToNull(name) != null, "QueryParam.value() was empty on parameter %s", paramIndex); - Collection query = addTemplatedParam(data.template().queries().get(name), name); + String query = addTemplatedParam(name); data.template().query(name, query); nameParam(data, name, paramIndex); isHttpParam = true; @@ -162,7 +162,7 @@ protected boolean processAnnotationsOnParameter(MethodMetadata data, String name = HeaderParam.class.cast(parameterAnnotation).value(); checkState(emptyToNull(name) != null, "HeaderParam.value() was empty on parameter %s", paramIndex); - Collection header = addTemplatedParam(data.template().headers().get(name), name); + String header = addTemplatedParam(name); data.template().header(name, header); nameParam(data, name, paramIndex); isHttpParam = true; @@ -179,11 +179,7 @@ protected boolean processAnnotationsOnParameter(MethodMetadata data, } // Not using override as the super-type's method is deprecated and will be removed. - protected Collection addTemplatedParam(Collection possiblyNull, String name) { - if (possiblyNull == null) { - possiblyNull = new ArrayList(); - } - possiblyNull.add(String.format("{%s}", name)); - return possiblyNull; + private String addTemplatedParam(String name) { + return String.format("{%s}", name); } } diff --git a/jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java b/jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java index d9ca5a9e67..56940e64ab 100644 --- a/jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java +++ b/jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java @@ -14,6 +14,7 @@ package feign.jaxrs; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import org.junit.Rule; import org.junit.Test; @@ -394,6 +395,18 @@ public void methodPathWithoutLeadingSlashParsesCorrectly() throws Exception { .hasUrl("/base/specific"); } + + @Test + public void producesWithHeaderParamContainAllHeaders() throws Exception { + assertThat(parseAndValidateMetadata(MixedAnnotations.class, "getWithHeaders", + String.class, String.class, String.class) + .template()) + .hasHeaders(entry("Accept", Arrays.asList("{Accept}", "application/json"))) + .hasQueries( + entry("multiple", Arrays.asList("stuff", "{multiple}")), + entry("another", Collections.singletonList("{another}"))); + } + interface Methods { @POST @@ -638,4 +651,14 @@ private MethodMetadata parseAndValidateMetadata(Class targetType, return contract.parseAndValidateMetadata(targetType, targetType.getMethod(method, parameterTypes)); } + + interface MixedAnnotations { + + @GET + @Path("/api/stuff?multiple=stuff") + @Produces("application/json") + Response getWithHeaders(@HeaderParam("Accept") String accept, + @QueryParam("multiple") String multiple, + @QueryParam("another") String another); + } }