diff --git a/spring-cloud-openfeign-core/pom.xml b/spring-cloud-openfeign-core/pom.xml
index 7f3fd9c8..ba9d7d21 100644
--- a/spring-cloud-openfeign-core/pom.xml
+++ b/spring-cloud-openfeign-core/pom.xml
@@ -231,12 +231,6 @@
spring-cloud-loadbalancer
true
-
- pl.pragmatists
- JUnitParams
- 1.1.1
- test
-
diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java
index 4fb21c15..663ef255 100644
--- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java
+++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/support/SpringMvcContract.java
@@ -173,14 +173,15 @@ public class SpringMvcContract extends Contract.BaseContract
if (clz.getInterfaces().length == 0) {
RequestMapping classAnnotation = findMergedAnnotation(clz,
RequestMapping.class);
- if (classAnnotation != null && classAnnotation.value().length > 0) {
+ if (classAnnotation != null) {
// Prepend path from class annotation if specified
- String pathValue = emptyToNull(classAnnotation.value()[0]);
- if (pathValue != null) {
+ if (classAnnotation.value().length > 0) {
+ String pathValue = emptyToNull(classAnnotation.value()[0]);
pathValue = resolve(pathValue);
- if (!pathValue.equals("/")) {
- data.template().uri(pathValue);
+ if (!pathValue.startsWith("/")) {
+ pathValue = "/" + pathValue;
}
+ data.template().uri(pathValue);
}
}
}
@@ -240,9 +241,11 @@ public class SpringMvcContract extends Contract.BaseContract
String pathValue = emptyToNull(methodMapping.value()[0]);
if (pathValue != null) {
pathValue = resolve(pathValue);
- if (!pathValue.equals("/")) {
- data.template().uri(pathValue, true);
+ // Append path from @RequestMapping if value is present on method
+ if (!pathValue.startsWith("/") && !data.template().path().endsWith("/")) {
+ pathValue = "/" + pathValue;
}
+ data.template().uri(pathValue, true);
}
}
diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java
index 15886e57..983743b3 100644
--- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java
+++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/support/SpringMvcContractTests.java
@@ -31,11 +31,8 @@ import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import feign.MethodMetadata;
import feign.Param;
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
import org.springframework.cloud.openfeign.CollectionFormat;
import org.springframework.cloud.openfeign.SpringQueryMap;
@@ -75,7 +72,6 @@ import static org.junit.Assume.assumeTrue;
* @author Artyom Romanenko
* @author Olga Maciaszek-Sharma
*/
-@RunWith(JUnitParamsRunner.class)
public class SpringMvcContractTests {
private static final Class> EXECUTABLE_TYPE;
@@ -602,53 +598,6 @@ public class SpringMvcContractTests {
"{Accept}");
}
- private Class[] doubleMappingClassesProvider() {
- return new Class[] { TestTemplate_RequestMapping_Empty_Class.class,
- TestTemplate_RequestMapping_Empty_Method.class };
- }
-
- @Test
- @Parameters(method = "doubleMappingClassesProvider")
- public void testDoubleRequestMapping_root(Class clazz) throws NoSuchMethodException {
- Method method = clazz.getDeclaredMethod("root");
- MethodMetadata data = contract
- .parseAndValidateMetadata(method.getDeclaringClass(), method);
-
- assertThat(data.template().url()).isEqualTo("/");
- }
-
- @Test
- @Parameters(method = "doubleMappingClassesProvider")
- public void testDoubleRequestMapping_rootReverse(Class clazz)
- throws NoSuchMethodException {
- Method method = clazz.getDeclaredMethod("rootReverse");
- MethodMetadata data = contract
- .parseAndValidateMetadata(method.getDeclaringClass(), method);
-
- assertThat(data.template().url()).isEqualTo("/");
- }
-
- @Test
- @Parameters(method = "doubleMappingClassesProvider")
- public void testDoubleRequestMapping_sub(Class clazz) throws NoSuchMethodException {
- Method method = clazz.getDeclaredMethod("sub");
- MethodMetadata data = contract
- .parseAndValidateMetadata(method.getDeclaringClass(), method);
-
- assertThat(data.template().url()).isEqualTo("/sub");
- }
-
- @Test
- @Parameters(method = "doubleMappingClassesProvider")
- public void testDoubleRequestMapping_subEmpty(Class clazz)
- throws NoSuchMethodException {
- Method method = clazz.getDeclaredMethod("subEmpty");
- MethodMetadata data = contract
- .parseAndValidateMetadata(method.getDeclaringClass(), method);
-
- assertThat(data.template().url()).isEqualTo("/subEmpty");
- }
-
@Test
public void testMultipleRequestPartAnnotations() throws NoSuchMethodException {
Method method = TestTemplate_RequestPart.class.getDeclaredMethod(
@@ -841,40 +790,6 @@ public class SpringMvcContractTests {
}
- @RequestMapping("")
- public interface TestTemplate_RequestMapping_Empty_Class {
-
- @RequestMapping("/")
- String root();
-
- @RequestMapping("")
- String rootReverse();
-
- @RequestMapping("/sub")
- String sub();
-
- @RequestMapping("subEmpty")
- String subEmpty();
-
- }
-
- @RequestMapping("/")
- public interface TestTemplate_RequestMapping_Empty_Method {
-
- @RequestMapping("")
- String root();
-
- @RequestMapping("/")
- String rootReverse();
-
- @RequestMapping("/sub")
- String sub();
-
- @RequestMapping("subEmpty")
- String subEmpty();
-
- }
-
@JsonAutoDetect(fieldVisibility = ANY, getterVisibility = NONE,
setterVisibility = NONE)
public class TestObject {