使用AOP攔截Controller獲取@PathVariable注解傳入的參數(shù)
AOP攔截Controller獲取@PathVariable注解傳入?yún)?shù)
前言:
最近項(xiàng)目中需要對(duì)controller傳入的應(yīng)用標(biāo)識(shí)(appMarkId)進(jìn)行校驗(yàn),appMarkId@PathVariable傳入到url模版中的,這里用到了aop統(tǒng)一攔截處理,但是在攔截的過程中發(fā)現(xiàn)request獲取不到該參數(shù),隨后進(jìn)行了研究。
示例代碼:
處理:
Map map = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
可以用這個(gè)方法獲取到所有uri模版中傳入的參數(shù)。
擴(kuò)展: aop中獲取request和response
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletResponse response = servletRequestAttributes.getResponse();
動(dòng)態(tài)參數(shù)使用@PathVariable解析
現(xiàn)在有如下的一條超鏈接
<a href="<c:url value=" rel="external nofollow" /actions/article/readArticle/${article.id}"/> " target="_blank">${article.title}</a>
這條超鏈接的特點(diǎn)就是在URL路徑中添加了EL表達(dá)式解析出來的id值。
因此,在SpringMVC的Controller層中,需要解析它,使用@PathVariable("articleId") Long articleId 來解析。
@PathVariable是專門用來解析URL請(qǐng)求中的動(dòng)態(tài)參數(shù)。
在Controller層的代碼如下
public static final String URL_ARTICLE_READ = "article/readArticle/{articleId}"; /** * 去文章詳情頁面 * 根據(jù)URL路徑中指定的文章ID號(hào),去獲取制定文章的內(nèi)容 * * @param articleId 指定的文章的ID號(hào) * @return 獲取此文章的數(shù)據(jù),并去文章詳情頁面 */ @RequestMapping(value = {URL_ARTICLE_READ} ) public ModelAndView readArticle(@PathVariable("articleId") Long articleId){ LOGGER.info("enter article detail page, articleId = {}",articleId); final Article article = articleService.getArticleById(articleId); ... }
這樣,頁面上的${article.id}的值,就最終映射到了Java中的Long articleId 上了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)中線程封閉知識(shí)點(diǎn)詳解
在本篇文章里我們給大家整理了關(guān)于Java并發(fā)中線程封閉的知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們學(xué)習(xí)參考下。2019-07-07SpringBoot中并發(fā)定時(shí)任務(wù)的實(shí)現(xiàn)、動(dòng)態(tài)定時(shí)任務(wù)的實(shí)現(xiàn)(看這一篇就夠了)推薦
這篇文章主要介紹了SpringBoot并發(fā)定時(shí)任務(wù)動(dòng)態(tài)定時(shí)任務(wù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04解決httpServletRequest.getParameter獲取不到參數(shù)的問題
這篇文章主要介紹了解決httpServletRequest.getParameter獲取不到參數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07java使用common-httpclient包實(shí)現(xiàn)post請(qǐng)求方法示例
這篇文章主要給大家介紹了關(guān)于java使用common-httpclient包實(shí)現(xiàn)post請(qǐng)求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08IDE Eval Reset忘了重置進(jìn)不去的完美解決方法
這篇文章主要介紹了IDE Eval Reset忘了重置進(jìn)不去的完美解決方法,插件安裝方式包括離線安裝和在線安裝方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12