SpringBoot中的Restful架构风格的请求方式
RESTful是一种软件设计风格,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
SpringMVC对RESTful风格的接口有着天然的支持,本篇将讲述如何在SpringBoot中怎样写。
几个注解
在讲述使用之前,想要理解SpringMVC的几个常用注解:
- @Controller:修饰class,用来创建处理http请求的对象
- @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
- @RequestMapping:配置url映射
- @PostMapping: 这个是@RequestMapping+POST方法的简写
- @RequestHeader: 请求Header参数
- @PathVariable: URL路径参数,比如/user/{id}中的id参数
- @RequestParam: URL请求参数,比如/user?id=1中的id参数
- @RequestBody: 请求Body参数
REST接口开发常用的注解
@RestController与@Controller
@RestController相当于 @Controller和@ResponseBody结合。它有两层含义:一是作为控制器注入到Spring上下文环境,二是请求响应为数据序列化(默认序列化方式是JSON),而不是跳转到html或模板页面。
@RequestMapping 与@GetMapping、@PutMapping、@PostMapping、@DeleteMapping
@RequestMapping(value = “/article”, method = RequestMethod.GET) 新方法可以简写为: @GetMapping("/article"),其他同理。
@RequestBody与@ResponseBody
用于接收和响应序列化数据(JSON),可以支持嵌套JSON数据结构。
@PathVariable 与@RequestParam
PathVariable用于URI上的{参数}
RequestParam用于接收普通方式提交的参数
案例
@GetMapping("/emps")
public String list(Model model){
Collection<Employee> employees = employeeDao.getAll();
model.addAttribute("emps",employees);
// 放在请求域中共享
// thymeleaf才会默认拼接字符串
return "emp/list";
}
// 来到员工添加页面
@GetMapping("/emp")
public String toAddPage(Model model){
// 来到添加页面,查出所有的部门,在页面显示
Collection<Department> departments = departmentDao.getDepartments();
model.addAttribute("depts",departments);
return "emp/add";
}
// 员工添加
// SpringMvc自动封装参数和入参对象的属性进行--绑定:要求请求参数的名字和javaBean的入参的对象里面的属性名是一样的
@PostMapping("/emp")
public String addEmp(Employee employee){
// redirect:表示重新定项到一个地址 /代表当前项目路径
// forward:表示转发到一个地址
// System.out.println(employee);
// 保存员工
employeeDao.save(employee);
return "redirect:/emps";
}