//@Controller //将当前类的对象放入容器
//@ResponseBody //将方法的返回值(对象和集合)转json返回
@RestController
//@RequestMapping("/user") 如果@RequestMapping标注在类上, 代表提取公共请求路径
public class UserController {
@RequestMapping("/user/demo1") // 给当前方法绑定一个请求地址
//@ResponseBody //将方法的返回值(对象和集合)转json返回
public User demo1(String name, Integer age) {
User user = new User(name, age);
return user;
}
// value: 等同于path, 用于给当前方法绑定请求路径
// 支持数组的写法, 代表可以为一个方法绑定多个请求路径
@RequestMapping(value = {"/user/demo2", "/user/demo3"})
//@ResponseBody
public String demo2() {
return "ok";
}
// method: 限制请求类型,支持数组的写法, 代表可以同时允许多种请求方式
// 如果method属性省略, 代表的是全部方式都可以
@RequestMapping(value = "/user/demo4", method = {RequestMethod.GET, RequestMethod.POST})
//@ResponseBody
public String demo4() {
return "ok";
}
// 使用简单类型接收 需要保证前端传递的参数名称跟方法的形参名称一致
// 对于一些简单类型的数据, mvc底层是可以自动完成转换的
@RequestMapping("/user/demo5")
public String demo5(String name, Integer age) {
System.out.println("name:" + name + ",age:" + age);
return "ok";
}
// 使用对象类型接收 需要保证前端传递的参数名称跟对象属性名称一致
@RequestMapping("/user/demo6")
public String demo6(User user) {
System.out.println(user);
return "ok";
}
// 使用数组类型接收 需要保证前端传递的参数名称跟方法的形参名称一致
@RequestMapping("/user/demo7")
public String demo7(String[] hobby) {
System.out.println(Arrays.toString(hobby));
return "ok";
}
// 使用集合类型接收 需要保证前端传递的参数名称跟方法的形参名称一致
// 如果直接使用List来接收请求参数, 需要在参数类型之前加入@RequestParam
@RequestMapping("/user/demo8")
public String demo8(@RequestParam("hobby") List<String> hobby) {
System.out.println(Arrays.toString(hobby.toArray()));
return "ok";
}
// 使用日期类型接收
// 在参数之前,使用@DateTimeFormat(pattern = "自定义日期格式")
@RequestMapping("/user/demo9")
public String demo9(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date updateTime) {
System.out.println(updateTime);
return "ok";
}
// 接收请求体中的json数据
// 在方法形参中去声明一个对象, 在对象之前使用@RequestBody注解
// 此注解就会从请求体中接收json字符串, 并且按照给的类型进行转换
// @RequestMapping("/user/demo10")
// public String demo10(@RequestBody User user) {
// System.out.println(user);
//
// return "ok";
// }
@RequestMapping("/user/demo10")
public String demo10(@RequestBody Map<String, Object> map) {
System.out.println(map.get("name"));
System.out.println(map.get("age"));
return "ok";
}
// 接收请求路径中的参数
//@PathVariable("name") 从请求路径上获取参数 注意: 路径上使用{}做占位符
@RequestMapping("/user/demo11/name/{name}/age/{age}")
public String demo11(
@PathVariable("name") String name,
@PathVariable("age") Integer age
) {
System.out.println("name:" + name + ",age:" + age);
return "ok";
}
//@RequestParam 有3个使用场景
// 1. 当请求中参数名称跟方法形参名称不对应的时候,可以使用此注解的name属性完成映射
// 2. 当请求中有可能不传递的参数时, 可以使用此注解的defaultValue属性设置默认值
// 3. 接收List集合
// 注意:@RequestParam标注的参数默认情况下不能为空, 如果想取消这个限制,使用required = false
@RequestMapping("/user/demo12")
public String demo12(
@RequestParam(name = "name", required = false) String username,
@RequestParam(defaultValue = "18") Integer age
) {
System.out.println("username:" + username);
System.out.println("age:" + age);
return "ok";
}
// 模拟异常
@RequestMapping("/user/demo21")
public void demo21(Integer type) {
if (type == 1) { // ArithmeticException
int i = 1 / 0;
} else if (type == 2) { // NullPointerException
String s = null;
System.out.println(s.length());
} else { // ArrayIndexOutOfBoundsException
Integer[] arr = new Integer[2];
arr[5] = 1;
}
}
// restful--添加
//@RequestMapping(value = "/users", method = RequestMethod.POST)
@PostMapping("/users") // 仅仅接收post请求
public void save(@RequestBody User user) {
System.out.println(user);
}
// restful--查询列表
//@RequestMapping(value = "/users", method = RequestMethod.GET)
@GetMapping("/users") // 仅仅接收get请求
public List<User> findAll() {
List<User> list = new ArrayList<>();
list.add(new User("张三", 18));
list.add(new User("李四", 19));
return list;
}
// 主键删除
@DeleteMapping("/users/{id}")
public void deleteById(@PathVariable("id") Integer id) {
System.out.println("删除id:" + id);
}
// 主键查询
@GetMapping("/users/{id}")
public void findById(@PathVariable("id") Integer id) {
System.out.println("查询id:" + id);
}
}