diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/support/SpringMvcContract.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/support/SpringMvcContract.java index 8a023630..fd7cfeb3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/support/SpringMvcContract.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/support/SpringMvcContract.java @@ -28,7 +28,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import org.springframework.beans.BeanUtils; import org.springframework.cloud.netflix.feign.AnnotatedParameterProcessor; import org.springframework.cloud.netflix.feign.annotation.PathVariableParameterProcessor; import org.springframework.cloud.netflix.feign.annotation.RequestHeaderParameterProcessor; @@ -324,9 +323,7 @@ public class SpringMvcContract extends Contract.BaseContract // has a parameter name return parameterNames != null && parameterNames.length > parameterIndex // has a type - && parameterTypes != null && parameterTypes.length > parameterIndex - // and it is a simple property - && BeanUtils.isSimpleProperty(parameterTypes[parameterIndex].getClass()); + && parameterTypes != null && parameterTypes.length > parameterIndex; } private class SimpleAnnotatedParameterContext diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/support/SpringMvcContractTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/support/SpringMvcContractTests.java index ecb11426..edb44acb 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/support/SpringMvcContractTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/support/SpringMvcContractTests.java @@ -297,6 +297,19 @@ public class SpringMvcContractTests { assertNotNull(data.indexToExpander().get(0)); } + @Test + public void testProcessAnnotations_ListParamsWithoutName() throws Exception { + Method method = TestTemplate_ListParamsWithoutName.class.getDeclaredMethod("getTest", + List.class); + MethodMetadata data = this.contract + .parseAndValidateMetadata(method.getDeclaringClass(), method); + + assertEquals("/test", data.template().url()); + assertEquals("GET", data.template().method()); + assertEquals("[{id}]", data.template().queries().get("id").toString()); + assertNotNull(data.indexToExpander().get(0)); + } + @Test public void testProcessAnnotations_MapParams() throws Exception { Method method = TestTemplate_MapParams.class.getDeclaredMethod("getTest", @@ -457,6 +470,11 @@ public class SpringMvcContractTests { ResponseEntity getTest(@RequestParam("id") List id); } + public interface TestTemplate_ListParamsWithoutName { + @RequestMapping(value = "/test", method = RequestMethod.GET) + ResponseEntity getTest(@RequestParam List id); + } + public interface TestTemplate_MapParams { @RequestMapping(value = "/test", method = RequestMethod.GET) ResponseEntity getTest(@RequestParam Map params);