当前位置:   article > 正文

11.4 SpringBoot 整合 SpringMVC_springboot整合了spring和springmvc吗

springboot整合了spring和springmvc吗

1、SpringBoot 整合 SpringMVC  简介

Spring Boot下的Spring MVC和之前的Spring MVC使用是完全一样的,主要有以下注解

  •  @Controller:Spring MVC的注解,处理 http 请求
  • @RestControlle:Spring 4 后新增注解,是 @Controller 和 @ResposeBody 的组合注解

  • @ResponseBody:用于返回字符串或  json 数据

  • @RequestMapping:支持 Get  和 Post 请求

  • @GetMapping RequestMapping 和 Get 请求的组合,只支持 Get 请求,Get 请求主要用于查询操作

  • @PostMapping:~,请求主要用于用户新增数据

  • @PutMapping:~,用于修改数据
  • @DeleteMapping:~,用于删除数据

 综合案例:

​​​​​​​        ①创建一个MVCController,里面使用上面介绍的各种注解接收不同的请求

  1. /**
  2. * 该案例主要演示了使用Spring提供的不同注解接收不同类型的请求
  3. * Created by Felix on 2019/1/23
  4. */
  5. //RestController注解相当于加了给方法加了@ResponseBody注解,所以是不能跳转页面的,只能返回字符串或者json数据
  6. @RestController
  7. public class MVCController {
  8. /**
  9. *以前我们通过method属性指定请求的方式
  10. * @RequestMapping即支持get又支持post
  11. * 不写method默认就是
  12. */
  13. @RequestMapping(value="/boot/req",method = {RequestMethod.GET,RequestMethod.POST})
  14. public Object req(){
  15. return "req";
  16. }
  17. /**
  18. * 只支持get
  19. */
  20. @GetMapping("/boot/get")
  21. public Object get(){
  22. return "get";
  23. }
  24. /**
  25. * 只支持post
  26. */
  27. @PostMapping("/boot/post")
  28. public Object post(){
  29. return "post";
  30. }
  31. /**
  32. * 只支持put
  33. */
  34. @PutMapping("/boot/put")
  35. public Object put(){
  36. return "put";
  37. }
  38. /**
  39. * 只支持delete
  40. */
  41. @DeleteMapping("/boot/delete")
  42. public Object delete(){
  43. return "delete";
  44. }
  45. }

 ②Http接口请求工具Postman介绍

        作用:使用 Postman 进行其它请求类型测试

        因为通过浏览器输入地址,默认发送的只能是get请求,通过Postman工具,可以模拟发送不同类型的请求,并查询结果,在安装的时候,有些机器可能会需要安装MicroSort .NET Framework

 

2、SpringBoot 实现 Restful

  ①Restfu简介

        REST:Representational State Transfer

  • 一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
  • 以前:访问资源(图片,servlet程序),请求资源同时带上请求方式,如果get请求直接访问到doget方法上,如果post请求直接访问到dopost
  • rest理念访问资源:请求资源,然后按照请求的方式进行处理,如果说get方式,查询操作,如果put 更新操作,如果是delete方式 删除资源,如果是post方式 添加资源
  • 任何的技术都可以实现这种理念,如果一个架构符合REST原则,就称它为RESTFul架构
  • 外在体现:
  • 比如我们要访问一个http接口:http://localhost:8080/boot/order?id=1021&status=1
  • 采用RESTFul风格则http地址为:http://localhost:8080/boot/order/1021/1

②Spring Boot 开发 RESTFUL

主要注解实现:

  • @PathVariable获取url中的数据;该注解是实现RESTFul最主要的一个注解
  • @PostMapping:接收和处理Post方式的请求

  • @DeleteMapping:接收delete方式的请求,可以使用GetMapping代替

  • @PutMapping:接收put方式的请求,可以用PostMapping代替

  • @GetMapping:接收get方式的请求

③RESTful的优点

  • 轻量,直接基于http,不再需要任何别的诸如消息协议

get/post/put/delete为CRUD操作

  • 面向资源一目了然,具有自解释性
  • 数据描述简单,一般以xml,json做数据交换。
  • 无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
  • 简单、低耦合

3、案例:使用RESTful风格模拟实现对学生的增删改查操作

​​​​​​​①创建RESTfulController,并编写代码

  1. @RestController
  2. public class RESTfulController {
  3. /**
  4. * 添加学生
  5. * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/wangpeng/23
  6. * 请求方式:POST
  7. * @param name
  8. * @param age
  9. * @return
  10. */
  11. @PostMapping(value = "/springBoot/student/{name}/{age}")
  12. public Object addStudent(@PathVariable("name") String name,
  13. @PathVariable("age") Integer age) {
  14. Map<String,Object> retMap = new HashMap<String, Object>();
  15. retMap.put("name",name);
  16. retMap.put("age",age);
  17. return retMap;
  18. }
  19. /**
  20. * 删除学生
  21. * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/1
  22. * 请求方式:Delete
  23. * @param id
  24. * @return
  25. */
  26. @DeleteMapping(value = "/springBoot/student/{id}")
  27. public Object removeStudent(@PathVariable("id") Integer id) {
  28. return "删除的学生id为:" + id;
  29. }
  30. /**
  31. * 修改学生信息
  32. * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/2
  33. * 请求方式:Put
  34. * @param id
  35. * @return
  36. */
  37. @PutMapping(value = "/springBoot/student/{id}")
  38. public Object modifyStudent(@PathVariable("id") Integer id) {
  39. return "修改学生的id为" + id;
  40. }
  41. @GetMapping(value = "/springBoot/student/{id}")
  42. public Object queryStudent(@PathVariable("id") Integer id) {
  43. return "查询学生的id为" + id;
  44. }
  45. }

②​​​​​​​使用Postman模拟发送请求,进行测试

 

 

 

小结: 

  • 传递参数变简单了
  • 服务提供者对外只提供了一个接口服务,而不是传统的CRUD四个接口

4、请求冲突

解决办法:

  • 改路径
  • 改请求方式
  1. @RestController
  2. public class RESTfulController {
  3. /**
  4. * id:订单标识
  5. * status:订单状态
  6. * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/order/1/1001
  7. * @param id
  8. * @param status
  9. * @return
  10. */
  11. @GetMapping(value = "/springBoot/order/{id}/{status}")
  12. public Object queryOrder(@PathVariable("id") Integer id,
  13. @PathVariable("status") Integer status) {
  14. Map<String,Object> map = new HashMap<String,Object>();
  15. map.put("id",id);
  16. map.put("status",status);
  17. return map;
  18. }
  19. /**
  20. * id:订单标识
  21. * status:订单状态
  22. * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1/order/1001
  23. * @param id
  24. * @param status
  25. * @return
  26. */
  27. @GetMapping(value = "/springBoot/{id}/order/{status}")
  28. public Object queryOrder1(@PathVariable("id") Integer id,
  29. @PathVariable("status") Integer status) {
  30. Map<String,Object> map = new HashMap<String,Object>();
  31. map.put("id",id);
  32. map.put("status",status);
  33. return map;
  34. }
  35. /**
  36. * id:订单标识
  37. * status:订单状态
  38. * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1001/order/1
  39. * @param id
  40. * @param status
  41. * @return
  42. */
  43. @GetMapping(value = "/springBoot/{status}/order/{id}")
  44. public Object queryOrder2(@PathVariable("id") Integer id,
  45. @PathVariable("status") Integer status) {
  46. Map<String,Object> map = new HashMap<String,Object>();
  47. map.put("id",id);
  48. map.put("status",status);
  49. return map;
  50. }
  51. /**
  52. * id:订单标识
  53. * status:订单状态
  54. * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1001/order/1
  55. * @param id
  56. * @param status
  57. * @return
  58. */
  59. @PostMapping(value = "/springBoot/{status}/order/{id}")
  60. public Object queryOrder3(@PathVariable("id") Integer id,
  61. @PathVariable("status") Integer status) {
  62. Map<String,Object> map = new HashMap<String,Object>();
  63. map.put("id",id);
  64. map.put("status",status);
  65. return map;
  66. }
  67. /**
  68. * query1和query2两个请求路径会发生请求路径冲突问题
  69. * query3与query1和query2发生请求不冲突
  70. * 注意:虽然两个路径写法改变了,但是由于传递的两个参数都是int值,所以不知道该交给哪个请求进行处理
  71. * 就会出现匹配模糊不清的异常,所以要想解决冲突,有两种方式:
  72. * 1.修改请求路径
  73. * 2.修改请求方式
  74. */
  75. }

 

 5、RESTFUL原则

  • 增post请求、删delete请求、改put请求、查get请求
  • 请求路径不要出现动词

例如:查询订单接口

/boot/order/1021/1(推荐)

/boot/queryOrder/1021/1(不推荐)

  • 分页、排序等操作,不需要使用斜杠传参数

例如:订单列表接口

/boot/orders?page=1&sort=desc

一般传的参数不是数据库表的字段,可以不采用斜杠

***REST:

  1. 请求资源
  2. 请求方式
  3. 根据参数操作
  4. 不是资源的信息(参数),一般不用斜杠传参数,采用质询参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/435316
推荐阅读
相关标签
  

闽ICP备14008679号