SpringMVC获取请求参数的几种方式

SpringMVC获取参数的方式:

  • 使用原生的 HttpServletRequest 接收
  • @RequestParam、@RequestHeader、@CookieValue
  • @RequestBody
  • @PathVariable
  • @SessionAttribute
  • @ModelAttribute

对于get请求来说,可以使用的方式有:

  • 使用原生的 request 直接 request.getParameter("")

  • 使用注解@RequestParam,形如:
    该注解中的 value 值也就是以下的 “name” 与 “pwd” 要与请求参数名保持一致,springmvc会自动将参数值赋予 userName 与 password

@RequestMapping(value = "/getData")
public void getData(@RequestParam("name") String userName, 
                    @RequestParam("pwd") String password) {
	System.out.println(userName+","+password);
}
  • 在方法的参数列表中直接声明属性名,当然此形参要与请求参数名保持一致
@RequestMapping(value = "/getData")
public void getData(String name, String password) {
	System.out.println(name+","+password);
}

对于post请求来说,可以使用的方式有:

  • 使用原生的 request
  • 使用注解@RequestParam,用法与get一致,请求参数很多的话用这个就很累赘了
  • 使用@RequestBody,可以将所有请求参数转化为一个字符串,也可以封装成map集合,用法:
@RequestMapping("/getData")
private void getData(@RequestBody String strAttrs) throws IOException {
	System.out.println(strAttrs);
}
/* 这是发请求给后端的axios */
var app1 = new Vue({
	el: "#app1",
	methods: {
	getData: function () {
		axios.post("getData", {
				categoryId: 2,
           	 	field: "add_time",
            	order: "DESC",
            	start: 0,
            	limit: 5
			});
		}
	}
});

打印出的结果字符串:{"categoryId":2,"field":"add_time","order":"DESC","start":0,"limit":5}

将请求参数封装为map也可以,用法:

@RequestMapping("/getData")
private void getData(@RequestBody Map<String, Object> mapAttrs) throws IOException {
	System.out.println(mapAttrs);

    System.out.println(mapAttrs.get("categoryId"));
    System.out.println(mapAttrs.get("field"));
    System.out.println(mapAttrs.get("order"));
    System.out.println(mapAttrs.get("key"));
    System.out.println(mapAttrs.get("start"));
    System.out.println(mapAttrs.get("limit"));
}

打印出的结果:
{categoryId=2, field=add_time, order=DESC, start=0, limit=5}
categoryId:2
field:add_time
order:DESC
key:null
start:0
limit:5

对于其他注解用法的说明:

  • @RequestHeader、@CookieValue用法与 @RequestParam 用法一致,前者获取请求头,后者获取请求中的Cookie数据
  • @PathVariable 可以适合 restful 编程风格,该注解可以获取url中的参数,形如:
/* 发给controller的删除url */
axios.delete("${pageContext.request.contextPath}/action/"+id)
@ResponseBody
@RequestMapping(value = "/action/{id}", method = RequestMethod.DELETE)
public Integer deleteAnimal(@PathVariable("id") Integer id) {

	return service.deleteAnimal(id);
}
  • @SessionAttribute,该注解可以指定value名对应的属性值放入HttpSession会话对象中,也可以将types属性指定的数据类型对应的数据放入session中,该注解只能修饰类,例如:
    @SessionAttributes(value = {"name","pwd"},types = {Integer.class})
    就是将名为 “name”、“pwd” 的数据与所有的 Integer 类型数据存入session

  • @ModelAttribute,该注解可修饰方法与方法中形参

  1. 修饰方法时:该方法在每个目标方法之前被调用,可以在其中放入目标方法需要的模型数据

  2. 修饰形参时例如:
    springmvc先会从模型数据中查找名为 “userId” 的数据,如果找不到,在看该类是否用@SessionAttribute修饰,去session中查找该数据,如果再找不到就抛异常,期间找到了就赋值

@ResponseBody
@RequestMapping("/getOneInfoById")
private User getOneInfoById(@ModelAttribute("userId") Integer userId) throws IOException {
	if (userId != null) {
		return dao.getOneInfoById(userId);
	}
	return null;
}
发布了12 篇原创文章 · 获赞 3 · 访问量 238

猜你喜欢

转载自blog.csdn.net/qq_38599840/article/details/105037010