關於一些Spring MVC控制器的參數注解總結


     昨天同事問我控制器參數的注解的問題,我好久沒那樣寫過,把參數和url一起設置,不過,今天我看了一些文章,查了一些資料,我盡可能的用我自己的理解方式來解釋它吧!

  

1.@RequestParam綁定單個請求參數值

@RequestParam用於將請求參數區數據映射到功能處理方法的參數上。

[java] view plain copy
public String requestparam1(@RequestParam String username)  

  

請求中包含username參數(如/requestparam1?username=zhang),則自動傳入。

 

此處要特別注意:右擊項目,選擇“屬性”,打開“屬性對話框”,選擇“Java Compiler”然后再打開的選項卡將“Add variable attributes to generated class files”取消勾選,意思是不將局部變量信息添加到類文件中,如圖6-12所示:

 圖6-12

當你在瀏覽器輸入URL,如“requestparam1?username=123”時會報如下錯誤

Name for argument type [java.lang.String] not available, and parameter name information not found in class file either,表示得不到功能處理方法的參數名,此時我們需要如下方法進行入參:

[java] view plain copy
public String requestparam2(@RequestParam("username") String username)  

即通過@RequestParam("username")明確告訴Spring Web MVC使用username進行入參。

@RequestParam注解主要有哪些參數:

value:參數名字,即入參的請求參數名字,如username表示請求的參數區中的名字為username的參數的值將傳入;

required:是否必須,默認是true,表示請求中一定要有相應的參數,否則將報404錯誤碼;

defaultValue:默認值,表示如果請求中沒有同名參數時的默認值,默認值可以是SpEL表達式,如“#{systemProperties['java.vm.version']}”。

[java] view plain copy
public String requestparam4(@RequestParam(value="username",required=false) String username)   

  

表示請求中可以沒有名字為username的參數,如果沒有默認為null,此處需要注意如下幾點:

 

     原子類型:必須有值,否則拋出異常,如果允許空值請使用包裝類代替。

     Boolean包裝類型類型:默認Boolean.FALSE,其他引用類型默認為null。

[java] view plain copy
public String requestparam5(  
@RequestParam(value="username", required=true, defaultValue="zhang") String username)   

  表示如果請求中沒有名字為username的參數,默認值為“zhang”。

如果請求中有多個同名的應該如何接收呢?如給用戶授權時,可能授予多個權限,首先看下如下代碼:

[java] view plain copy
public String requestparam7(@RequestParam(value="role") String roleList)  

  如果請求參數類似於url?role=admin&rule=user,則實際roleList參數入參的數據為“admin,user”,即多個數據之間使用“,”分割;我們應該使用如下方式來接收多個請求參數:

public String requestparam7(@RequestParam(value="role") String[] roleList)     

  或

public String requestparam8(@RequestParam(value="list") List<String> list)      

 

2.@PathVariable綁定URI模板變量值

@PathVariable用於將請求URL中的模板變量映射到功能處理方法的參數上。

1 @RequestMapping(value="/users/{userId}/topics/{topicId}")  
2 public String test(  
3        @PathVariable(value="userId") int userId,   
4        @PathVariable(value="topicId") int topicId) 

如請求的URL為“控制器URL/users/123/topics/456”,則自動將URL中模板變量{userId}和{topicId}綁定到通過@PathVariable注解的同名參數上,即入參后userId=123、topicId=456

所以,關於控制器參數,先介紹這么多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM