Unverified Commit b619ee00 by Ondřej Božek Committed by Spencer Gibb

Adds composed @RequestMapping annotations support

Fixed short circuit condition to correctly detect @RequestMapping shortcuts (@GetMapping, @PostMaping etc.) Fixes gh-1201
parent 899d8bc2
...@@ -156,7 +156,8 @@ public class SpringMvcContract extends Contract.BaseContract ...@@ -156,7 +156,8 @@ public class SpringMvcContract extends Contract.BaseContract
@Override @Override
protected void processAnnotationOnMethod(MethodMetadata data, protected void processAnnotationOnMethod(MethodMetadata data,
Annotation methodAnnotation, Method method) { Annotation methodAnnotation, Method method) {
if (!(methodAnnotation instanceof RequestMapping)) { if (!RequestMapping.class.isInstance(methodAnnotation) && !methodAnnotation
.annotationType().isAnnotationPresent(RequestMapping.class)) {
return; return;
} }
......
...@@ -48,6 +48,8 @@ import feign.MethodMetadata; ...@@ -48,6 +48,8 @@ import feign.MethodMetadata;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.ToString; import lombok.ToString;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/** /**
* @author chadjaros * @author chadjaros
...@@ -102,6 +104,21 @@ public class SpringMvcContractTests { ...@@ -102,6 +104,21 @@ public class SpringMvcContractTests {
} }
@Test @Test
public void testProcessAnnotations_SimpleGetMapping() throws Exception {
Method method = TestTemplate_Simple.class.getDeclaredMethod("getMappingTest",
String.class);
MethodMetadata data = this.contract
.parseAndValidateMetadata(method.getDeclaringClass(), method);
assertEquals("/test/{id}", data.template().url());
assertEquals("GET", data.template().method());
assertEquals(MediaType.APPLICATION_JSON_VALUE,
data.template().headers().get("Accept").iterator().next());
assertEquals("id", data.indexToName().get(0).iterator().next());
}
@Test
public void testProcessAnnotations_Class_AnnotationsGetSpecificTest() public void testProcessAnnotations_Class_AnnotationsGetSpecificTest()
throws Exception { throws Exception {
Method method = TestTemplate_Class_Annotations.class Method method = TestTemplate_Class_Annotations.class
...@@ -163,6 +180,20 @@ public class SpringMvcContractTests { ...@@ -163,6 +180,20 @@ public class SpringMvcContractTests {
} }
@Test @Test
public void testProcessAnnotations_SimplePostMapping() throws Exception {
Method method = TestTemplate_Simple.class.getDeclaredMethod("postMappingTest",
TestObject.class);
MethodMetadata data = this.contract
.parseAndValidateMetadata(method.getDeclaringClass(), method);
assertEquals("", data.template().url());
assertEquals("POST", data.template().method());
assertEquals(MediaType.APPLICATION_JSON_VALUE,
data.template().headers().get("Accept").iterator().next());
}
@Test
public void testProcessAnnotationsOnMethod_Advanced() throws Exception { public void testProcessAnnotationsOnMethod_Advanced() throws Exception {
Method method = TestTemplate_Advanced.class.getDeclaredMethod("getTest", Method method = TestTemplate_Advanced.class.getDeclaredMethod("getTest",
String.class, String.class, Integer.class); String.class, String.class, Integer.class);
...@@ -392,8 +423,14 @@ public class SpringMvcContractTests { ...@@ -392,8 +423,14 @@ public class SpringMvcContractTests {
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
TestObject getTest(); TestObject getTest();
@GetMapping(value = "/test/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<TestObject> getMappingTest(@PathVariable("id") String id);
@RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
TestObject postTest(@RequestBody TestObject object); TestObject postTest(@RequestBody TestObject object);
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
TestObject postMappingTest(@RequestBody TestObject object);
} }
@RequestMapping("/prepend/{classId}") @RequestMapping("/prepend/{classId}")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment