0

@RequestMappingSpring のアノテーションの振る舞いに戸惑っています。次のコードで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";
    }
}
4

1 に答える 1

1

Springはこれを意図的に行います。メソッドレベルとタイプレベルのリクエストマッピングパターン値が一致する場合、そのうちの1つのみを使用します。@見るorg.springframework.util.AntPathMatcher#combine()

1つの方法は、メソッドレベルでRequestMapping値に「/」という接尾辞を付けることです(以下のように)。これにより、"/test/test/"URLとして使用できます(もちろん、 NOT /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";
    }
}
于 2012-11-16T06:23:52.990 に答える