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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值