0

私はSpring MVCの初心者で、次の疑問があります。

コントローラーには、次のように注釈が付けられたメソッドがあります。

@Controller
@RequestMapping(value = "/users")
public class UserController {

    @RequestMapping(params = "register")
    public String createForm(Model model) {
        model.addAttribute("user", new Customer());
        return "user/register";
    } 

}

したがって、このメソッドは URL /users?registerに対する HTTP リクエストを処理します。ここで、registerはパラメーターです (クラス全体が/usersリソースに対するリクエストを処理するため)。

params = "register"を使用する代わりに、次の構文を使用する場合も同じですか。

@Controller
public class UserController {

    @RequestMapping("/users/{register}")
    public String createForm(Model model) {
        model.addAttribute("user", new Customer());
        return "user/register";
    } 

}

クラスレベルでマッピングを削除し、@RequestMapping("/users/{register}")を使用しています。

最初の例と同じ意味ですか?

4

1 に答える 1

6

いいえ、それらは完全に異なる構造です:

コード 1

@Controller
@RequestMapping(value = "/users")
public class UserController {

    @RequestMapping(params = "register")
    public String createForm(Model model) {
        model.addAttribute("user", new Customer());
        return "user/register";
    } 

}

この場合、createFormメソッドは URL で HTTP リクエストが行われたときに呼び出されます/users?registerSpring Javadocから引用すると、このメソッドはregisterHTTP パラメーターの値に関係なく呼び出されることを意味します。それはただ存在しなければなりません。

「myParam」スタイルの式もサポートされており、そのようなパラメーターはリクエストに存在する必要があります (任意の値を持つことができます)。

コード 2

@Controller
public class UserController {

    @RequestMapping("/users/{register}")
    public String createForm(Model model) {
        model.addAttribute("user", new Customer());
        return "user/register";
    } 

}

この場合、@RequestMappingとして宣言registerしていPathVariableます。このメソッドcreateFormは、HTTP リクエストが URL/users/somethingで行われた場合に呼び出されますsomethingsomethingそして、実際には次のように取得できます。

@RequestMapping("/users/{register}")
public String createForm(@PathVariable("register") String register, Model model) {
    // here "register" will have value "something".
    model.addAttribute("user", new Customer());
    return "user/register";
} 
于 2015-08-30T16:26:12.087 に答える