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 將請求體寫入某個對象。