SpringBoot學習5.4-SpringMVC-控制器獲取參數

目錄

1.六種參數傳遞方式

2.參數傳遞用法和實例

2.1.無註解獲取參數 

2.2.註解@RequestParam獲取參數 

2.3.獲取數組參數 

2.4.url傳遞參數 

2.5.獲取格式化參數 

2.6.獲取json參數


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

URL:http://localhost:8080/mvcparam/mp5?btd=2019-11-06&dtt=2018-01-06T01:30:59.123-05:00&money=293,884.453

控制器方法:

@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工程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章