Spring mvc plugin auto add '/' if necessary (#1315)

* spring mvc plugin auto add '/' if necessary
This commit is contained in:
SevenPointOld 2018-06-06 15:41:30 +08:00 committed by 吴晟 Wu Sheng
parent 5ba4f647d9
commit 2c822363cb
3 changed files with 40 additions and 4 deletions

View File

@ -54,7 +54,7 @@ public class ControllerConstructorInterceptorTest {
Method m = obj.getClass().getMethods()[0];
cache.addPathMapping(m, "#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test1#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test1/#toString");
}
@Test
@ -67,7 +67,7 @@ public class ControllerConstructorInterceptorTest {
Method m = obj.getClass().getMethods()[0];
cache.addPathMapping(m, "#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/#toString");
}
@Test
@ -80,7 +80,7 @@ public class ControllerConstructorInterceptorTest {
Method m = obj.getClass().getMethods()[0];
cache.addPathMapping(m, "#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test3#toString");
Assert.assertEquals("the two value should be equal", cache.findPathMapping(m), "/test3/#toString");
}
@RequestMapping(value = "/test1")

View File

@ -45,7 +45,31 @@ public class PathMappingCacheTest {
Method m = obj.getClass().getMethods()[0];
pathMappingCache.addPathMapping(m, "#toString");
Assert.assertEquals("the two value should be equal", pathMappingCache.findPathMapping(m), "org.apache.skywalking.apm.plugin.spring.mvc#toString");
Assert.assertEquals("the two value should be equal", pathMappingCache.findPathMapping(m), "/org.apache.skywalking.apm.plugin.spring.mvc/#toString");
}
@Test
public void testAutoAddPathSeparator() {
String rightPath = "/root/sub";
Object obj = new Object();
Method m = obj.getClass().getMethods()[0];
PathMappingCache cache = new PathMappingCache("root");
cache.addPathMapping(m, "sub");
Assert.assertEquals(cache.findPathMapping(m), rightPath);
PathMappingCache cache2 = new PathMappingCache("/root");
cache2.addPathMapping(m, "/sub");
Assert.assertEquals(cache2.findPathMapping(m), rightPath);
PathMappingCache cache3 = new PathMappingCache("root");
cache3.addPathMapping(m, "/sub");
Assert.assertEquals(cache3.findPathMapping(m), rightPath);
PathMappingCache cache4 = new PathMappingCache("/root");
cache4.addPathMapping(m, "sub");
Assert.assertEquals(cache4.findPathMapping(m), rightPath);
}
}

View File

@ -19,6 +19,8 @@
package org.apache.skywalking.apm.plugin.spring.mvc.commons;
import org.apache.skywalking.apm.util.StringUtil;
import java.lang.reflect.Method;
import java.util.concurrent.ConcurrentHashMap;
@ -28,11 +30,17 @@ import java.util.concurrent.ConcurrentHashMap;
* @author zhangxin
*/
public class PathMappingCache {
private static final String PATH_SEPARATOR = "/";
private String classPath = "";
private ConcurrentHashMap<Method, String> methodPathMapping = new ConcurrentHashMap<Method, String>();
public PathMappingCache(String classPath) {
if (!StringUtil.isEmpty(classPath) && !classPath.startsWith(PATH_SEPARATOR)) {
classPath = PATH_SEPARATOR + classPath;
}
this.classPath = classPath;
}
@ -41,6 +49,10 @@ public class PathMappingCache {
}
public void addPathMapping(Method method, String methodPath) {
if (!StringUtil.isEmpty(methodPath) && !methodPath.startsWith(PATH_SEPARATOR)
&& !classPath.endsWith(PATH_SEPARATOR)) {
methodPath = PATH_SEPARATOR + methodPath;
}
methodPathMapping.put(method, classPath + methodPath);
}
}