在本章中,一心同学将会详细介绍Controller中是如何接收参数的,并通过通俗易懂的例子来给大家演示。
目录
1.普通类型传入参数
2.@RequestParam
2.1 value
2.2 required
2.3 defaultValue
3.普通类型数组的参数
4.@RequestHeader获取请求头入参
5.Pojo对象类型的参数
6.对象中套对象(级联属性)
结语
1.普通类型传入参数
在Controller的目标方法上直接设置方法的参数。就可以直接传入请求参数的值。
@Controller
public class BlogController {
@RequestMapping(value="/blog")
public String hello(String name){
System.out.println(name+",hello");
return "hello";
}
}
浏览器:
后台输出:hello,yixin
注意:参数名必须和方法的参数名相匹配。
2.@RequestParam
可以使提交的域名称和处理方法的参数名不一致,只需跟@RequestParam里的参数一致即可。
注意:请求参数名blogname和方法参数名name的区别,这里也就相当于起别名。
@Controller
public class BlogController {
@RequestMapping(value="/blog")
public String hello(@RequestParam("blogname")String name){
System.out.println(name+",hello");
return "hello";
}
}
浏览器:
2.1 value
(只有这个属性时,可以不写value)
@RequestParam("blogname")String name表示SpringMVC会自动将请求过来的参数blogname的值。注入到方法参数name中。
2.2 required
介绍:属性设置当前要求的blogname参数是否客户端必须传递。默认值是true表示必须传递。
如果没有传递就报错。
也可以手动修改为false。允许不传递值。则默认值是null
@Controller
public class BlogController {
@RequestMapping(value="/blog")
public String hello(@RequestParam(value = "blogname",required = false)String name){
System.out.println(name+",hello");
return "hello";
}
}
浏览器:
2.3 defaultValue
介绍:属性设置当客户端没有传递值的时候。设置的默认值。
@Controller
public class BlogController {
@RequestMapping(value="/blog")
public String hello(@RequestParam(value = "blogname",defaultValue = "yixin")String name){
System.out.println(name+",hello");
return "hello";
}
}
浏览器:
后台输出: yixin,hello
3.普通类型数组的参数
对于数组中的元素,使用&进行连接。
@Controller
public class BlogController {
@RequestMapping(value="/blog")
public String hello(String[] names){
if(names!=null) {
for(String name:names)
System.out.println(name + ",hello");
}
return "hello";
}
}
浏览器:
后台输出: yixin,hello tom,hello
4.@RequestHeader获取请求头入参
@RequestMapping(value="/header")
public String header(@RequestHeader(value = "User-Agent") String userAgent,
@RequestHeader(value = "Host") String host){
System.out.println(userAgent);
System.out.println(host);
return "hello";
}
浏览器:
后台输出:
作用:可以通过这样获取到请求头信息,然后对headers进行控制
@RequestMapping(value="/blogs",headers = "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36")
public String hellos(Model model){
model.addAttribute("msg","Hello,SpringMVCAnnotation!");
return "hello";
}
5.Pojo对象类型的参数
介绍:要求提交的表单域和对象的属性名一致 , 参数使用对象即可。
实体类:
public class Blog {
private int id;
private String name;
//get,set,有参,无参
}
控制类:
@RequestMapping(value="/getblog")
public String getblog(Blog blog){
System.out.println(blog);
return "hello";
}
前端设计表单:
浏览器:
注意提交后的url:
后台输出:
Blog{id=1, name='yixin'}
注意:pojo对象自动入参的要求是客户端传递的参数名必须跟pojo对象的属性名对应上
6.对象中套对象(级联属性)
介绍:Author对象中套有blog对象。只需要传递参数。子对象名.属性名就可以自动的注入到Author对象的blog对象的属性中。
Author:
public class Author {
private int id;
private String name;
private Blog blog;
//get,set,有参,无参
}
Blog:
public class Blog {
private int id;
private String name;
//get,set,有参,无参
}
Controller:
@RequestMapping(value="/getauthor")
public String getauthor(Author author){
System.out.println(author);
return "hello";
}
前端表单:
运行
浏览器:
提交后的浏览器url:
后台输出:
Author{id=1, name='yixin', blog=Blog{id=2, name='tom'}}
结语
以上就是一心同学对SpringMVC-接收请求参数的讲解,有许多重要知识点,大家可以自己上机演示一下,收获也会颇多。



