Commit 2c822363 authored by SevenPointOld's avatar SevenPointOld Committed by 吴晟
Browse files

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

* spring mvc plugin auto add '/' if necessary
parent 5ba4f647
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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")
+25 −1
Original line number Diff line number Diff line
@@ -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);
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -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);
    }
}