SpringMVC —— 接收请求参数 & Restful
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通