SpringMVC註解@RequestMapping @RequestParam @ResponseBody 和 @RequestBody 解析

 

SpringMVC Controller層獲取參數及返回數據的方式:前端

 

@RequestMappingspring

@RequestMapping(「url」),這裏的 url寫的是請求路徑的一部分,通常做用在 Controller的方法上,做爲請求的映射地址。json

代碼:後端

@RequestMapping(value = "/test")//類級別映射,能夠沒有,通常用於減小書寫量
public class myController { //方法級別映射,必須有,那麼這個方法的訪問地址就是/test/aaa,請求到的頁面就是test.jsp【固然,這裏的.jsp須要在配置文件中配置】
    @RequestMapping(value = "/aaa") public String getMyName() { return "test"; } }

 

 

@RequestParamapp

在SpringMVC後臺控制層獲取參數的方式主要有兩種,一種是request.getParameter("name"),另一種是用註解@RequestParam直接獲取。這裏主要講這個註解 

1、基本使用,獲取提交的參數 
後端代碼: 異步

@RequestMapping("testRequestParam") public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) { System.out.println(inputStr); int inputInt = Integer.valueOf(request.getParameter("inputInt")); System.out.println(inputInt); // ......省略 
    return "index"; }

前端代碼: jsp

<form action="/gadget/testRequestParam" method="post"> 參數inputStr:<input type="text" name="inputStr"> 參數intputInt:<input type="text" name="inputInt">    
</form>

 

前端界面: ide

執行結果: 
test1 
123 post

能夠看到spring會自動根據參數名字封裝進入,咱們能夠直接拿這個參數名來用 ui

 

2、各類異常狀況處理 
一、能夠對傳入參數指定參數名 

@RequestParam String inputStr // 下面的對傳入參數指定爲aa,若是前端不傳aa參數名,會報錯 
@RequestParam(value="aa") String inputStr

錯誤信息: 
HTTP Status 400 - Required String parameter 'aa' is not present 

二、能夠經過required=false或者true來要求@RequestParam配置的前端參數是否必定要傳 

// required=false表示不傳的話,會給參數賦值爲null,required=true就是必需要有 
@RequestMapping("testRequestParam") public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)

 

三、若是用@RequestMapping註解的參數是int基本類型,可是required=false,這時若是不傳參數值會報錯,由於不傳值,會賦值爲null給int,這個不能夠 

@RequestMapping("testRequestParam") public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, @RequestParam(value="inputInt", required=false) int inputInt ,HttpServletRequest request) { // ......省略 
    return "index"; }

解決方法: 
    「Consider declaring it as object wrapper for the corresponding primitive type.」建議使用包裝類型代替基本類型,如使用「Integer」代替「int」

 

 

 

@RequestBody

@RequestBody是做用在形參列表上,用於將前臺發送過來固定格式的數據【xml 格式或者 json等】封裝爲對應的 JavaBean 對象,封裝時使用到的一個對象是系統默認配置的 HttpMessageConverter進行解析,而後封裝到形參上。

 

 

@ResponseBody

@ResponseBody是做用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,通常在異步獲取數據時使用【也就是AJAX】,在使用 @RequestMapping後,返回值一般解析爲跳轉路徑,可是加上 @ResponseBody 後返回結果不會被解析爲跳轉路徑,而是直接寫入 HTTP response body 中。 好比異步獲取 json 數據,加上 @ResponseBody 後,會直接返回 json 數據。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。

須要注意的呢,在使用此註解以後不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於經過response對象輸出指定格式的數據。

 

@ResponseBody是做用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,通常在異步獲取數據時使用【也就是AJAX】,在使用 @RequestMapping後,返回值一般解析爲跳轉路徑,可是加上 @ResponseBody 後返回結果不會被解析爲跳轉路徑,而是直接寫入 HTTP response body 中。 好比異步獲取 json 數據,加上 @ResponseBody 後,會直接返回 json 數據。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。

相關文章
相關標籤/搜索