目录
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工程。