SpringMVC控制器传参

SpringMVC控制器传参

从前端获取参数

参数名一致

如果前端传入的参数名与后端的一致,则不需要特殊处理,直接获取即可

前端:

<a href="<%=path%>/goods/goodsByType?typeId=4">根据类型查找商品</a><br/>	

后端:

	@RequestMapping("/goodsByType")
	public String selectByType(Integer typeId) {
		List<Goods> goodsList = goodsService.selectByTypeId(typeId);
		
		for (Goods goods : goodsList) {
			System.out.println(goods.getName());
		}
		
		return "index";
		
	}

参数名不一致

参数名不一致的情况,需要用@RequestParam(“前端的参数名”)来获取前端的参数

前端传入的参数为tId

	<a href="<%=path%>/goods/getParaRequiredF?tId=4">传参名字不一致</a><br/>	

后端方法的参数名为typeId,与前端不一致,因此需要加上@RequestParam注解来说明从前端获取名字为tId的参数,放到typeId

@RequestMapping("/getParaRequiredF")
public String getParaRequiredF(@RequestParam(value="tId")Integer typeId) {
    System.out.println(typeId);

    return "index";

}

参数封装的方式

如果前端传入的参数名与现有的POJO的参数名一致,那么可以使用该POJO的类来获取前端参数

比如登录界面需要传入的参数为:

<form action="<%=path %>/login" method="post">
    <input name="username">
    <input name="passwd">
    <input type="submit" value="提交"></form>

我先有一个叫Member的类,它包含的属性如下:

public class Member {
    private Integer id;
    private String username;
    private String passwd;
    private Date logindate;
    //...忽略get、set方法
}

那么只要登录界面传入的参数名与Member的一致,就可以在控制器直接用Member接收

	@RequestMapping("/testController1")
	public String list(String userName,Integer age) {
		System.out.println("这是SpringMVC第一个请求");
		System.out.println(userName);
		System.out.println(age);
		//默认以转发方式渲染到视图,没有重定向页面,只有重定向请求
		return "list";
	}

获取日期

SpringMVC默认的日期格式为YYYY/MM/dd,如果传递别的格式,则需要规定日期格式再接收参数

前端如下:

	<a href="<%=path%>/testController/DateDIY?date=2019-08-02">自定义日期请求</a>

控制器获取参数如下:

	@RequestMapping("/testController/DateDIY")
	public String date2(@DateTimeFormat(pattern="YYYY-MM-dd")Date date) {
		System.out.println("这是SpringMVC第一个请求");
		System.out.println(date);
		//默认以转发方式渲染到视图,没有重定向页面,只有重定向请求
		return "list";
	}

非必需参数和默认值

有时候前端可能不一定会传递给后端所需的参数,比如说:

后端的某个方法需要a、b这两个参数,但是前端值传递了a这个参数,而且依然要求这个方法处理请求,如果直接这么编码的话,运行时就会报错,那么要怎么处理呢?

使用@RequestParam中的required属性,表明某个参数不是必须的,这样就运行的时候就不会报错,但是缺少的参数会被赋值为null

前端如下:

	<a href="<%=path%>/goods/getParaRequiredF">非必需传参,空值,且传参名字不一致</a><br/>

后端如下:

	@RequestMapping("/getParaRequiredF")
	public String getParaRequiredF(@RequestParam(value="tId",required=false)Integer tId) {

		if(tId==null) {
			System.out.println("没有参数");
		}else {
			System.out.println(tId);
		}
		return "index";

	}

如果我不想这个值为空,想为它赋一个默认值要怎么办呢?使用@RequestParamdefaultValue属性即可

前端如下:

	<a href="<%=path%>/goods/getParaDefalt">非必需传参,默认参数</a>	<br/>

后端如下:

这样tId的值就是1而不是null了

	@RequestMapping("/getParaDefalt")
	public String getParaDefalt(@RequestParam(value="typeId",required=false,defaultValue="1")Integer tId) {
	
		if(tId==1) {
			System.out.println("tId= "+tId);
		}

		return "index";

	}

路径方式获得参数

有时候我们可能不在request中获取参数,而是从路径中获取参数

如:

<a href="<%=path%>/goods/getPathPara/myName">路径传参</a><br/>

我们可以在后端获取myName这个参数,只需要使用@PathVariable这个注解,配合@RequestMapping注解声明路径模板,就可以在方法中获取相应的参数。

需要注意的是{name}@PathVariable("name")两个参数名要一致

后端如下:

	@RequestMapping("/getPathPara/{name}")
	public String getParam2(@PathVariable("name")String name) {
		
		System.out.println("路径获取参数name= "+name);
		
		return "index";
	}

输出结果为:

路径获取参数name= myName

传参给前端

把参数放到response里

控制器代码如下:

	@RequestMapping("/login")
	public String login(Member member,Model model) {
		
		System.out.println(member.getUsername()+"\t"+member.getPasswd());
		
		model.addAttribute("msg", "hello!");
		return "list";
	}

前端直接获取即可

	<h2>${msg}</h2>

前端显示

hello!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值