如何将"/test/test"映射到映射到"/test"的控制器的方法?



我对Spring的@RequestMapping注释的行为感到困惑。在下面的代码中,test()映射到"/test"test_test()映射到"/test/test/test"。这是怎么回事?如果我想将test()映射到"/test/test",我该怎么办?

package com.mvc.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value = "/test")
public class Test {
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    String test() {
        return "test";
    }
    @RequestMapping(value = "/test/test", method = RequestMethod.GET)
    String test_test() {
        return "test";
    }
}

Spring 有意这样做;当方法和类型级别的请求映射模式值匹配时,它仅使用其中一个。@See org.springframework.util.AntPathMatcher#combine()

一种方法是在方法级别将"/"后缀为 RequestMapping 值(如下所示),这样您就可以使用 "/test/test/" 作为 url(当然,不是/test/test)。

@Controller
@RequestMapping(value = "/test")
public class Test {
    @RequestMapping(value = "/test/", method = RequestMethod.GET)
    String test() {
        return "test";
    }
}

不知道为什么没有记录下来。

因此,我认为匹配"/test/test" url的唯一剩余方法是使用URI模板模式。

@Controller
@RequestMapping(value = "/test")
public class Test {
    @RequestMapping(value = "/{anythinghere}", method = RequestMethod.GET)
    String test() {
        return "test";
    }
}

最新更新