注解
@RestController
相当于 @Controller
+ @ResponseBody
@Controller
标注为 Controller
1 2 3 4
| @RestController public class SimpleParamController { }
|
RequestMapping 请求与响应处理
1 2 3 4 5 6 7
| @RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "Hello World"; } }
|
注解的属性:
Mapping 衍生注解
1 2 3 4
| @GetMapping("/url") @PostMapping("/url") @PutMapping("/url") @DeleteMapping("/url")
|
公共路径可提取到类上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @RestController @RequestMapping("/depts") public class DeptController {
@Autowired private DeptService deptService;
@GetMapping public Result list() { List<Dept> deptList = deptService.list(); return Result.success(deptList); }
@DeleteMapping("/{id}") public Result delete(@PathVariable Integer id) { deptService.delete(id); return Result.success(); }
@PostMapping public Result delete(@RequestBody Dept dept) { deptService.add(dept); return Result.success(); } }
|
请求接收
原始方式获取参数
1 2 3 4 5 6 7 8 9 10 11 12 13
| @RestController public class SimpleParamController { @RequestMapping("/simpleParam") public String simpleParam(HttpServletRequest request) { String name = request.getParameter("name"); String ageStr = request.getParameter("age");
int age = Integer.parseInt(ageStr); System.out.println(name + ":" + age); return "OK"; } }
|
简单参数
请求参数名与函数的参数名相同
1 2 3 4 5
| @RequestMapping("/simpleParam") public String simpleParam(String name, Integer age) { System.out.println(name + ":" + age); return "OK"; }
|
@RequestParam
请求参数处理(限制、映射、默认值)
name属性,映射参数名
如果参数名未对应上,值为null,但不报错
@RequestParam(name="")
映射参数名,使用属性name或 value
都可以
1 2 3 4 5 6 7 8
| @RequestMapping("/simpleParam") public String simpleParam( @RequestParam(name="name")String username, Integer age ) { System.out.println(name + ":" + age); return "OK"; }
|
@RequestParam
有一个默认属性 required=turn
,不传入参数会报错
defaultValue
,设置默认值
annotation属性值类型为字符串,最后会自行转换为参数类型
路径参数 @PathVariable
注解 @PathVariable
获取路径参数, 路径中用 {参数名}
标注参数
1 2 3 4 5
| @RequestMapping("/pathParam/{id}") public String pathParam(@PathVariable Integer id) { System.out.println(id); return "OK"; }
|
Mapping的SQL annotation处:
JSON 参数 @RequestBody
用 实体对象 接收参数:
键名于对象名保持一致,嵌套的也是如此
注解 @RequestBody
解析JSON
1 2 3 4 5
| @RequestMapping("/jsonParam") public String jsonParam(@RequestBody User user) { System.out.println(user); return "OK"; }
|
日期参数
1 2 3 4 5 6
| @RequestMapping("/dateParam") public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updataTime) { System.out.println(updataTime); return "OK"; }
|
注解 @DateTimeFormat
指定日期参数格式
文件接收
对象 MultipartFile 多文件处理
配置:
常见方法:
前端发送的响应类型:multipart/form-data
响应
String
1 2 3 4 5
| @RequestMapping public String hello(){ System.out.println("Hello, World ~"); return "Hello, World ~"; }
|
直接响应字符串
响应对象,处理为JSON @ResponseBody
@ResponseBody
响应数据,返回的数据(对象)转换为 JSON 数据,发送给前端
如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。
1 2 3 4 5 6 7
| @RequestMapping("/getAddr") public Address getAddr() { Address addr = new Address(); addr.setProvince("广东"); addr.setCity("深圳"); return addr; }
|
转换成 JSON 后返回:
1
| {"province":"广东","city":"深圳"}
|
列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @RequestMapping("/listAddr") public List<Address> listAddr() { List<Address> list = new ArrayList<>();
Address addr = new Address(); addr.setProvince("广东"); addr.setCity("深圳");
Address addr2 = new Address(); addr2.setProvince("广西"); addr2.setCity("北海");
list.add(addr); list.add(addr2); return list; }
|
返回 JSON ,最外层是数组:
1
| [{"province":"广东","city":"深圳"},{"province":"广西","city":"北海"}]
|
统一响应结果
响应数据包装成一个 Result 类,以此统一
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Result { private Integer code; private String msg; private Object data;
}
|
返回:
1 2 3 4 5
| { "code":1, "msg":"操作成功", "data":... }
|