Spring mvc plugin auto add '/' if necessary (#1315)
* spring mvc plugin auto add '/' if necessary
This commit is contained in:
parent
5ba4f647d9
commit
2c822363cb
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue