搜尋

首頁  >  問答  >  主體

java - SpringMVC中的@ModelAttribute註解是可有可無的嗎?

在學習SpringMVC中的使用Controller接受表單的值,
按照《Spring實戰》中的代碼,Controller如下:

    @RequestMapping(value = "/register", method = POST)
    public String processRegistration(Spitter spitter) {
        System.out.println(spitter.getUsername());
        spitterRepository.save(spitter);
        return "redirect:/spitter/" + spitter.getUsername();
    }

打印那行是我自己加的,用來驗證表單的值是否綁定到了Spitter對象
而Spring官方的教程中在Spitter前麵多了一個@ModelAttribute注解,
但是在這個例子裏麵產生的效果和不加似乎是一樣的,都能夠綁定表單信息到對象中,
所以想問下這個注解的功能?在這個例子中是不是即使不顯示寫也能有一樣的功能?

天蓬老师天蓬老师2896 天前678

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:55:45

    不是的,@ModelAttribute有兩個作用,
    一個是取出數據,也就是將數據從請求中取出來封裝到controller方法的參數中
    一個是將這個數據放置到Model中,這樣你就可以在jsp頁面中使用EL表達式取出資料並顯示

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-18 10:55:45

    如果在參數上加了@ModelAttribute 註解,再執行@RequestMapping之前會先找到@ModelAttribute中的key,如果沒有@ModelAttribute ,如何沒有或沒有獲取到則會透過反射實例化一個spitter 物件,再透過request拿物件到你set到物件裡面的值。雖然結果是一樣的,但是走的流程不一樣。

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:55:45

    雖然有它自己特點,但是用了這麼久,都沒用上過,我覺得可以忽略 @ModelAttribute

    回覆
    0
  • 取消回覆