我如何将“/ test / test”映射到控制器的方法,该方法映射到“/ test”?

时间:2012-11-16 05:00:08

标签: spring model-view-controller controller annotations

我对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";
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

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

不知道为什么没有记录。

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

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