名称:@RequestMapping
类型:方法注解/类注解
位置:SpringMVC控制器方法定义上方
作用:设置房钱控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
先给出一个最基本示例:
@Controller
public class BookController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("Book saving!");
return "{'module' : 'book save'}";
}
}
该示例在此时可以成功的访问?
可如果此时,我们再定义一个如下的Bean:
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user saving!");
return "{'module':'SpringMVC'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("User delete!");
return "{'module' : 'user delete'}";
}
}
我们会发现在userBean中也有一个路径为/save的方法,此时会与BookBean中的save方法冲突,这时我们就要给每个请求方法设置唯一的访问路径
方法有二:
第一种:给每一个方法都设置一个唯一路径
示例:
@Controller
public class UserController {
@RequestMapping("/user/save")
@ResponseBody
public String save(){
System.out.println("user saving!");
return "{'module':'SpringMVC'}";
}
@RequestMapping("/user/delete")
@ResponseBody
public String delete(){
System.out.println("User delete!");
return "{'module' : 'user delete'}";
}
}
?可以看到,我们给userBean中的每个方法都独立的设置了相应路径,保证了其路径的唯一
方法二:在类上设置路径前缀
示例:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user saving!");
return "{'module':'SpringMVC'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("User delete!");
return "{'module' : 'user delete'}";
}
}
可以看到,这种方法我们不需要对每一个请求方法的访问路径单独进行设置,只需要在类上用@RequestMapping设置一个路径前缀,这样类中的每个方法的访问路径都会是/user/..,也能保证其访问路径的唯一
普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数
Post请求中文乱码处理
为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
???求参数与形参不同名解决方法:
????????例如,请求参数名为username,而形参名为name,那么我们就需要将name与username绑定,方法如下:
public String save(@RequestParam("username") String name, String password){
System.out.println("user saving!");
可以看到1,使用@ResquestParam注解即可绑定二者的关系?
请求参数名与形参对象属性名相同,定义pojo类型形参即可接收参数
例如:
public String popo(User user){
System.out.println("user:" + user);
return "{'module' : 'pojo'}";
}
public class User {
private String name;
private int age;
?
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
例如:
public String popo(User user){
System.out.println("user:" + user);
return "{'module' : 'pojo'}";
}
public class User {
private String name;
private int age;
private Address address;
?
请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数
@RequestMapping("/students")
@ResponseBody
public void students(String[] name){
System.out.println(Arrays.toString(name));
}
请求参数名与形参集合对象名相同且请求参数为多个,@RequesteParam绑定参数关系
@RequestMapping("habits")
@ResponseBody
public void habits(@RequestParam List<String> hab){}
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
第二步、在Spring核心配置文件中注解
@EnableWebMvc
@RequestMapping("/list")
@ResponseBody
public String listjson(@RequestBody List<String> likes){
json数据与形参对象属性名相同,定义POJO类型形参即可接收参数
@RequestMapping("/pojo")
@ResponseBody
public String pojojson(@RequestBody User user){
json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数
@RequestMapping("/pojolist")
@ResponseBody
public String listpojojson(@RequestBody List<User> list){
@RequestParam用于接收url地址传参,表单传参[application/x-www-form-urlencoded]
@RequestBody用于接收json数据[application/json]
后期开发中,发送json格式数据为主,@RequestBody应用较广
如果发送非json格式,选用@RequestParam格式接收请求参数
????????日期类型数据基于系统不同格式也不尽相同
????????????????1999-01-02
????????????????1999/01/02
????????????????02/01/1999
@RequestMapping("/date1")
@ResponseBody
public String date1(Date date ){
@RequestMapping("/date2")
@ResponseBody
public String date2(@DateTimeFormat(pattern = "yyyy-mm-dd") Date date ){
?
@RequestMapping("/date3")
@ResponseBody
public String date3(@DateTimeFormat(pattern = "yyyy-mm-dd hh:mm:ss") Date date ){
@RequestMapping("/JumpPage")
public String JumpPage(){
System.out.println("跳转界面");
return "page.jsp";
}
@RequestMapping("/Text")
@ResponseBody
public String Text(){
System.out.println("返回纯文本数据");
return "response text";
}
@RequestMapping("/POJO")
@ResponseBody
public User topojo(){
System.out.println("返回POJO类型数据");
User user = new User();
user.setName("cacb");
user.setAge(20);
return user;
}
@RequestMapping("/POJOList")
@ResponseBody
public List<User> pojolist(){
System.out.println("返回POJO集合数据");
User user1 = new User();
user1.setName("cacb");
user1.setAge(20);
User user2 = new User();
user2.setName("bbbb");
user2.setAge(11);
List<User> userList =new ArrayList<User>();
userList.add(user1);
userList.add(user2);
return userList;
}
}