SpringMVC接收参数方式,Controller接收参数,常见不规范的传参和错误传参

方式一:使用servlet原生的方式,通过request.getParameter(“key”)获取参数;

<fieldset>
	<legend>用户注册1</legend>
	<form action="/value1" method="post">
		用户名:<input type="text" name="username"/><br/>
		密     码:<input type="password" name="password"/><br/>
		<input type="submit" value="提交"/>
	</form>
</fieldset>
@RequestMapping("/value1")
	ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception{
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		User u=new User(username, password);
		System.out.println(u);
		return null;
	}

方式二:在形参列表中直接写前台需要注入的参数,基于同名规则进行注入的;

<fieldset>
	<legend>用户注册2</legend>
	<form action="/value2" method="post">
		用户名:<input type="text" name="username"/><br/>
		密     码:<input type="password" name="password"/><br/>
		<input type="submit" value="提交"/>
	</form>
</fieldset>
@RequestMapping("/value2")
	ModelAndView value2(String username, String password) throws Exception{
		User u=new User(username, password);
		System.out.println(u);
		return null;
	}

如果前台名字和后台形参名字不一致的情况,使用@RequestParam(“前台指定名称”)注解来进行处理:

@RequestMapping("/value3")
	ModelAndView value3(@RequestParam("username")String name, String	password) throws Exception{
		User u=new User(name, password);
		System.out.println(u);
		return null;
	}

方式三:使用模型传参数的方式(采用属性注入形式)

<fieldset>
	<legend>用户注册4</legend>
	<form action="/value4" method="post">
		用户名:<input type="text" name="username"/><br/>
		密     码:<input type="password" name="password"/><br/>
		<input type="submit" value="提交"/>
	</form>
</fieldset>
@RequestMapping("/value4")
	ModelAndView value4(User u) throws Exception{
		System.out.println(u);
		return null;
	}

方式四:使用地址栏传参方式

  • 请求参数
http://localhost:8080/temp/6
@RequestMapping("/temp/{abc}")
	ModelAndView value5(@PathVariable("abc")String name) throws Exception{
		System.out.println(name);
		return null;
	}

方式五:Json传参,不能使用于get请求,一个请求只能有一个@RequestBody,也就是只能传一次json

@ResponseBody
@RequestMapping("test")
public void test( @RequestBody List<Integer> list) {		//required=false 表示参数非必须
		for (Integer integer : list) {
			System.out.println(integer);
		}
	
}
[1,2,5]

在这里插入图片描述

List类型传参

  • json方式请转到大标题,json传参(get请求不行)

  • 下面这种请求方式传参同时适用于post请求和get请求

@ResponseBody
@RequestMapping("test")
public void test(@RequestParam(value="list",required = false) List<Integer> list) {
		for (Integer integer : list) {
			System.out.println(integer);
		}
	
}

在这里插入图片描述
在这里插入图片描述

常见不合规错误的传参

Controller 方法使用了@RequestParam 注解传参,如果没有给这个参数传入值,将导致报错。因为默认 required 为 true。

	@GetMapping("/queryMenuDetailById")
    public ResponseEntity<BasiccBfmMenu> queryById(@RequestParam Long id);
http://localhost:8080/queryMenuDetailById

前端请求传入后端不接收的参数,该参数会自动被过滤不会报错

	@GetMapping("/queryMenuDetailById")
    public ResponseEntity<BasiccBfmMenu> queryById(Long id);
http://localhost:8080/queryMenuDetailById?id=3&ljj=2434
  • 请求存在@RequestBody,即使是不传入任何参数
    @PostMapping("/editDir")
    public ResultVO editDir(@RequestBody DirDto dirDto);

在这里插入图片描述

直接用String接收json,json写法有问题

public R<Boolean> delete(@RequestBody String id) 
{"id":"1527312204482969600"}

这个时候id的值将会是 {“id”:“1527312204482969600”} 而不是1527312204482969600

参考文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值