在專案中,controller中經常看到@modelattribute或者@modelattribute(「somename」)這種用法,這到底是個什麼意思呢?本文帶你一**竟。
在知道了modelattribute的執行時間和作用,我們來看看這個註解怎麼用。
該註解標註的方法可以帶有和請求方法一樣的引數,比如請求方法帶有乙個string userid,那麼該方法也可以帶有,兩個方法對應的值是一樣的,但要注意的是:
private
static
final string user_id =
"userid"
;@modelattribute
(user_id)
public string getuserid
(string userid)
如上面的**,就是自動獲取的方式,我的測試請求可以用如下格式:
get /api/test/model?userid=123
post /api/test
userid=234
另一種方式是在方法的引數前標明獲取方式:
private
static
final string user_id =
"userid"
;@modelattribute
(user_id)
public string getuserid
(@pathvariable
("userid"
) string userid)
如上,這種情況下對應的請求需要在路徑中包含userid,且需要注意的是:
如果用了這種方式,那麼這個類中所有的請求方法對應的uri都路徑中都需要包含userid的佔位符
比如我請求了如下介面
get /api/test/model/tt
//會報錯"missing uri template variable 'userid' for method parameter of type string"
同理,還可以用@requestparam @requestbody等獲取引數
使用的話我們可以直接用如下的方式
public object getsomething1
(@modelattribute
(user_id) string userid)
不加引數怎麼用呢?
舉個例子:
@modelattribute
public userdata getuserdata()
我們定義了乙個getuserdata方法,返回了乙個userdata例項,由於我們沒有像上面定義getuserid方法一樣直接指定@modelattribute的value值,返回後對應的key預設為返回型別且首字母小寫,即userdata。通過定義這個方法,我們可以在model中獲得乙個key為userdata的value,值為該方法的返回值。
如下為方法執行後model中的值。
}}
那麼定義好了,怎麼在方法中用呢?
(value =
"/api/test/model/post"
, method = requestmethod.post)
public object postuserdata
(@modelattribute userdata data)
這樣我們就可以獲得乙個userdata例項了,及時我的請求中沒有任何引數。
注意:上面的例子我們獲取了乙個userdata例項,如果對不同的請求我想得到不同的例項怎麼辦呢?
例子:
post /api/test/model/post?userid=popo
最後返回的值有原來的
}
變成了
}
這個變化只是因為我的請求加了引數,**未變。 Spring註解 Import註解
常用的匯入註解分類 註冊自己寫的類service dao controller可用包掃瞄 元件標註註解 controller service repository component bean 匯入的第三方包裡面的元件 import 快速給容器中匯入乙個元件 1 import 要匯入到容器中的元件 ...
Java 註解 元註解
retention retentionpolicy.source 註解僅存在於原始碼中,在class位元組碼檔案中不包含 retention retentionpolicy.class 預設的保留策略,註解會在class位元組碼檔案中存在,但執行時無法獲得,retention retentionpo...
spring註解之 Scope註解
1,scope註解是什麼 scope註解是springioc容器中的乙個作用域,在 spring ioc 容器中具有以下幾種作用域 基本作用域singleton 單例 prototype 多例 web 作用域 reqeust session globalsession 自定義作用域 a.single...