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 }
复制代码

 

posted @   青核桃啊  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示