關於動態參數使用@PathVariable的解析

動態參數使用@PathVariable解析

現在有如下的一條超鏈接

<a href="<c:url%20value=" rel="external nofollow" /actions/article/readArticle/${article.id}"/> "
                                                 target="_blank">${article.title}</a>

這條超鏈接的特點就是在URL路徑中添加瞭EL表達式解析出來的id值。

因此,在SpringMVC的Controller層中,需要解析它,使用@PathVariable("articleId") Long articleId 來解析。

@PathVariable是專門用來解析URL請求中的動態參數。

在Controller層的代碼如下

public static final String URL_ARTICLE_READ = "article/readArticle/{articleId}";
    /**
     * 去文章詳情頁面
     * 根據URL路徑中指定的文章ID號,去獲取制定文章的內容
     *
     * @param articleId 指定的文章的ID號
     * @return          獲取此文章的數據,並去文章詳情頁面
     */
    @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 上瞭。

獲取路徑中的參數值@PathVariable中的value

本期講的是@PathVariable註解的具體使用。與@RequestParam的區別

  • @PathVariable獲取URI地址中的參數值,需要結合URI模板映射
  • @PathVariable會將數據放到模型中,界面可以通過el表達式獲取(即瀏覽器上面可以顯示出來),但是@RequestParam不能通過界面獲得

1.@PathVariable String name

加上@PathVariable就能夠獲取到瀏覽器中rul的參數值

@RequestMapping("/get_param")
@Controller
public class GetParamController {
	@RequestMapping("/test6/{name}")  
	public String test6(@PathVariable String name) {
		System.out.println("GetParamController test6()...");
		System.out.println("name="+name);
		return "test";//跳轉到test.jsp
		/* 
		 * ../test6/tom   結果:name=null 就要在參數裡面加上@PathVariable  結果就變為:name=tom
		 * ../test6/tom?name=kk  結果:name=tom  拿到的是URI路徑裡面的值跟後面的沒有任何關系
		 * */
	}
}

2.@PathVariable(“username”) String name

當瀏覽器中的是username,而後臺要接收的是name

就會報錯,由於username和name不匹配

此時要加上value值,@PathVariable(“username”)

@RequestMapping("/get_param")
@Controller
public class GetParamController {
	@RequestMapping("/test7/{username}")  //username與下面的name不一致,報錯,就需要加上@PathVariable("username")
	public String test7(@PathVariable("username") String name) {//name和username不一致時,用@PathVariable("username")
		System.out.println("GetParamController test7()...");
		System.out.println("name="+name);
		return "test";//跳轉到test.jsp
	}
}

此時就不會報錯瞭

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: