目錄
1.六種參數傳遞方式
1.無註解獲取參數
2.註解@RequestParam獲取參數
3.獲取數組參數
4.url傳遞參數
5.獲取格式化參數
6.獲取json參數
2.參數傳遞用法和實例
以下實例Controller的類名和註解的寫法爲:
package com.zyf.springMVC.mvcparam;
import java.util.Arrays;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
/**
* springmvc 獲取url參數
*/
@Controller
@RequestMapping(path = { "/mvcparam" })
public class MvcParamController {
}
2.1.無註解獲取參數
語法:控制器方法參數與url參數必須同名,否則無法獲取。url參數可以爲空,但int參數(同理其他基本類型)不能爲空,轉換爲null賦值給int或報錯。
url:http://localhost:8080/mvcparam/mp1?id=2
控制器方法:
@RequestMapping(value = { "/mp1" })
public ModelAndView mp1(String name, int id, Integer age) {
ModelAndView mv = new ModelAndView();
mv.addObject("id", id);
mv.addObject("name", name);
mv.setViewName("mvcparam/mp1");
return mv;
}
url中不給id參數則報錯。name和age都爲空。
2.2.註解@RequestParam獲取參數
語法:在控制器方法的參數前加【@RequestParam(value = "url參數key", required = false或者true,defaultValue = "參數默認值")】。value 必須與url中保持一致。required=true則表示該參數必需,否則報錯。defaultValue給該參數一個默認值,如果url沒有給該參數賦值,則啓用默認值(間接說明這個參數不是必需)。
url:http://localhost:8080/mvcparam/mp2?int_id=2&str_name=zhangsan&integer_age=99
http://localhost:8080/mvcparam/mp2?int_id=2&str_name=zhangsan
控制器方法:
@RequestMapping(value = { "/mp2" })
public ModelAndView mp2(
@RequestParam("str_name") String name,//註解參數要與url中的一致
@RequestParam(value = "int_id", required = false) int id,// required的默認值是true,改成false表名不是必須參數
@RequestParam(value = "integer_age", defaultValue = "100") Integer age) {//如果url沒有有該參數,則使用defaultValue給該參數默認值
ModelAndView mv = new ModelAndView();
mv.addObject("id", id);
mv.addObject("name", name);
mv.addObject("age", age);
mv.setViewName("mvcparam/mp1");
return mv;
}
2.3.獲取數組參數
語法:url中數組元素用逗號隔開,控制器中用數組類型接收
URL:http://localhost:8080/mvcparam/mp3?id=2,3,4&name=zhangsan,lisi&age=99,100,101
控制器方法:
@RequestMapping(value = { "/mp3" })
public ModelAndView mp3(int[] id, String[] name, Integer[] age) {
ModelAndView mv = new ModelAndView();
mv.addObject("id", Arrays.toString(id));
mv.addObject("name", Arrays.toString(name));
mv.addObject("age", Arrays.toString(age));
mv.setViewName("mvcparam/mp1");
return mv;
}
2.4.url傳遞參數
語法:@RequestMapping佔位符{參數key}與@PathVariable(value="參數key")的參數key相等,組合註解獲取url的參數。@RequestMapping、@PathVariable和URl的參數key和參數個數必須一致。如下:
@RequestMapping(value = { "/路徑/{參數key1}/{參數key2}/{參數key3}" })
@PathVariable(value = "參數key1")
@PathVariable(value = "參數key2")
@PathVariable(value = "參數key3")
URL:http://localhost:8080/路徑1/路徑2/參數value1/參數value2/參數value3
控制器方法:
//@RequestMapping(value = { "/mp4/{int_id}" }) // http://localhost:8080/mvcparam/mp4/2
@RequestMapping(value = { "/mp4/{int_id}/{string_name}/{integer_age}" }) // http://localhost:8080/mvcparam/mp4/2/wangwu/18
public ModelAndView mp4(
@PathVariable(value = "int_id") int id,
@PathVariable(value = "string_name") String name,
@PathVariable(value = "integer_age") Integer age) {
ModelAndView mv = new ModelAndView();
mv.addObject("id", id);
mv.addObject("name", name);
mv.addObject("age", age);
mv.setViewName("mvcparam/mp1");
return mv;
}
2.5.獲取格式化參數
語法:@DateTimeFormat(iso = ISO.DATE) 將日期字符串轉換爲date
@DateTimeFormat(iso = ISO.DATE_TIME) 將日期時間字符串轉換爲datetime
@NumberFormat(pattern = "#,###.##") 將貨幣字符串轉換爲double
控制器方法:
@RequestMapping(value = { "/mp5" })
public ModelAndView mp5(
@DateTimeFormat(iso = ISO.DATE) Date btd,//字符串轉換爲date
@DateTimeFormat(iso = ISO.DATE_TIME) Date dtt,//字符串轉換爲date time
@NumberFormat(pattern = "#,###.##") double money//貨幣字符串轉換爲double
) {
ModelAndView mv = new ModelAndView();
mv.addObject("btd", btd);
mv.addObject("dtt", dtt);
mv.addObject("money", money);
mv.setViewName("mvcparam/mp1");
return mv;
}
2.6.獲取json參數
語法:@RequestBody標註在方法的參數實體前,表名改參數接受請求中的json數據,參數實體的屬性必須和json的屬性一致才能接收到對應的數據。
@ResponseBody是作用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,一般在異步獲取數據時使用【也就是AJAX】。當控制器方法有@ResponseBody標註時候,在執行完控制器返回後,處理器就會解析這個結果,將其轉換爲json數據,而模型和視圖(ModelAndView)返回空,也就不會解析視圖和渲染屬兔。
ajax請求:
<script type="text/javascript">
$(function() {
var params = {
id:2,
name:'zhangsan',
note:'測試json參數',
sex:1
};
$("#button").click(function() {
$.post({
url : "/mvcparam/mp7",
// 此處需要告知傳遞參數類型爲JSON,不能缺少
contentType : "application/json",
// 將JSON轉化爲字符串傳遞
data : JSON.stringify(params),
// 成功後的方法
success : function(result) {
if(result != null){
alert("參數傳遞成功,用戶名="+result.name);
}
}
});
});
});
</script>
控制器方法:
@RequestMapping(value = { "/mp7" })
@ResponseBody
public User mp7(@RequestBody User user) {
System.out.println(user);
return user;
}
github:https://github.com/zhangyangfei/SpringBootLearn.git中的springMVC工程。