1 package com.itheima.web.controller;
2
3 import com.itheima.domain.User;
4 import org.springframework.format.annotation.DateTimeFormat;
5 import org.springframework.stereotype.Controller;
6 import org.springframework.web.bind.annotation.*;
7
8 import java.util.ArrayList;
9 import java.util.Arrays;
10 import java.util.Date;
11 import java.util.List;
12
13
14 /*
15 @RestController = @Controller + @ResponseBody
16 @RequestMapping
17 */
18
19 // @Controller // 对象放入Springmvc容器
20 // ResponseBody // 标注在类上,代表类中所有方法上都生效
21 @RestController // 相当于 @Controller + @ResponseBody
22 public class UserController {
23
24 @RequestMapping("/user/demo1") // 为当前方法绑定一个请求地址
25 // @ResponseBody // 将返回结果对象转换为json返回
26 public User demo1(String name, Integer age) {
27 User user = new User(name, age);
28 return user;
29 }
30
31 // value: 用于给当前方法指定访问路径,支持数组的写法,代表可以给一个方法绑定多个路径
32 @RequestMapping(value = {"/demo2", "/demo3"})
33 public User demo2(String name, Integer age) {
34 User user = new User();
35 return user;
36 }
37
38 // method: 限制当前方法可以接收的请求类型,支持数组的写法,代表可以同时接收多种请求方式;如果method属性省略,代表可以接收所有类型请求
39 @RequestMapping(value = "/demo4", method = {RequestMethod.GET, RequestMethod.POST})
40 public String demo4() {
41 System.out.println("请求到达了后台");
42 return "OK";
43 }
44
45 // 简单参数: 需要保证前端传递的参数名称跟方法的形参名称一致
46 @RequestMapping("/user/demo5")
47 public String demo5(String name, Integer age) {
48 System.out.println("name:" + name + ",age" + age);
49 return "OK";
50 }
51
52 // 对象参数: 需要保证前端传递的参数名称跟实体类的属性名称一致
53 @RequestMapping("/user/demo6")
54 public String demo6(User user) {
55 System.out.println(user);
56 return "OK";
57 }
58
59 // 数组参数: 需要保证前端传递的参数名称跟方法中的数组形参名称一致
60 @RequestMapping("/user/demo7")
61 public String demo7(String[] hobby) {
62 System.out.println(Arrays.toString(hobby));
63 return "OK";
64 }
65
66 // 集合类型: 请求参数名与形参集合名称相同且请求参数为多个,使用`@RequestParam`绑定参数关系
67 @RequestMapping("/user/demo8")
68 public String demo8(@RequestParam("hobby") List<String> hobby) {
69 System.out.println(Arrays.toString(hobby.toArray()));
70 return "OK";
71 }
72
73 // 日期类型: 接收参数为日期类型,需要使用`@DateTimeFormat`定义参数格式
74 @RequestMapping("/user/demo9")
75 public String demo9(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date updateTime) {
76 System.out.println(updateTime);
77 return "OK";
78 }
79
80 // json参数 请求体提交json参数,后台需要使用 @RequestBody 接收
81 /*
82 SpringMVC也可以接收请求体中的json字符串为参数,并且自动封装为指定对象
83 此时要求JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用`@RequestBody`标识
84 */
85 @RequestMapping("/user/demo10")
86 public String demo10(@RequestBody User user) {
87 System.out.println(user);
88 return "OK";
89 }
90
91 // 路径参数 请求路径中提交的参数,需要使用 @PathVariable 获取参数
92 /*
93 springmvc还支持通过请求路径直接传递参数,后台使用{…}来标识该路径参数,需要使用`@PathVariable`获取
94 */
95 @RequestMapping("/user/demo11/name/{name}/age/{age}")
96 public String demo11(@PathVariable("name") String name,
97 @PathVariable("age") Integer age) {
98 System.out.println("name:" + name + ",age:" + age);
99 return "OK";
100 }
101
102 // 默认参数
103 /*
104 @RequestParam作用
105 1、当前端请求参数和方法形参不对应时,使用name属性完成映射
106 2、当前端不传某些参数时,使用 defaultValue 属性完成默认值设置
107 */
108 @RequestMapping("/user/demo12")
109 public String demo12(@RequestParam(name = "name") String username,
110 @RequestParam(defaultValue = "10") Integer age) {
111 System.out.println("name:" + username + ",age:" + age);
112 return "OK";
113 }
114
115 // 全局异常处理
116 @RequestMapping("/user/demo21")
117 public String demo21(String type) {
118 if ("1".equals(type)) {
119 int i = 1 / 0; // ArithmeticException
120 } else if ("2".equals(type)) {
121 String s = null;
122 System.out.println(s.length()); // NullPointerException
123 } else {
124 Integer[] arr = new Integer[2];
125 arr[5] = 1; // ArrayIndexOutOfBoundsException
126 }
127 return "OK";
128 }
129
130 // restful- 添加
131 // @RequestMapping(value = "/users", method = RequestMethod.POST) // 仅仅接收 POST 请求方式
132 @PostMapping("/users")
133 public String save(@RequestBody User user) {
134 System.out.println(user);
135 return "OK";
136 }
137
138 // restful- 修改
139 // @RequestMapping(value = "users/{id}", method = RequestMethod.PUT)
140 @PutMapping("users/{id}")
141 public void update(@PathVariable Integer id, @RequestBody User user) {
142 System.out.println("根据id修改:" + user + "id值为:" + id);
143 }
144
145 // restful- 主键删除
146 // @RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)
147 @DeleteMapping("/users/{id}")
148 public void deleteById(@PathVariable Integer id) {
149 System.out.println("删除id:" + id);
150 }
151
152 // restful- 查询列表
153 // @RequestMapping(value = "/users", method = RequestMethod.GET)
154 @GetMapping("/users")
155 public List<User> findAll() {
156 List<User> users = new ArrayList<User>();
157 users.add(new User("张三", 19));
158 users.add(new User("李四", 20));
159 return users;
160 }
161
162 // restful- 根据 id 查询
163 // @RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
164 @GetMapping("/users/{id}")
165 public User findById(@PathVariable Integer id) {
166 System.out.println("查询id:" + id);
167 return new User("张三", 18);
168 }
169 }