目录
1.六种参数传递方式
2.参数传递用法和实例
2.1.无注解获取参数
2.2.注解@RequestParam获取参数
2.3.获取数组参数
2.4.url传递参数
2.5.获取格式化参数
2.6.获取json参数
1.无注解获取参数
2.注解@RequestParam获取参数
3.获取数组参数
4.url传递参数
5.获取格式化参数
6.获取json参数
以下实例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 { }语法:控制器方法参数与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都为空。
语法:在控制器方法的参数前加【@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; }语法: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; }语法:@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; }语法:@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; }语法:@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工程。