11.4 SpringBoot 整合 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,里面使用上面介绍的各种注解接收不同的请求

/**
 * 该案例主要演示了使用Spring提供的不同注解接收不同类型的请求
 * Created by Felix on 2019/1/23
 */
//RestController注解相当于加了给方法加了@ResponseBody注解,所以是不能跳转页面的,只能返回字符串或者json数据
@RestController
public class MVCController {
    /**
     *以前我们通过method属性指定请求的方式
     * @RequestMapping即支持get又支持post
     * 不写method默认就是
     */
    @RequestMapping(value="/boot/req",method = {RequestMethod.GET,RequestMethod.POST})
    public Object req(){
        return "req";
    }

    /**
     * 只支持get
     */
    @GetMapping("/boot/get")
    public Object get(){
        return "get";
    }
    /**
     * 只支持post
     */
    @PostMapping("/boot/post")
    public Object post(){
        return "post";
    }
    /**
     * 只支持put
     */
    @PutMapping("/boot/put")
    public Object put(){
        return "put";
    }
    /**
     * 只支持delete
     */
    @DeleteMapping("/boot/delete")
    public Object delete(){
        return "delete";
    }
}

 ②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,并编写代码

@RestController
public class RESTfulController {

    /**
     * 添加学生
     * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/wangpeng/23
     * 请求方式:POST
     * @param name
     * @param age
     * @return
     */
    @PostMapping(value = "/springBoot/student/{name}/{age}")
    public Object addStudent(@PathVariable("name") String name,
                             @PathVariable("age") Integer age) {

        Map<String,Object> retMap = new HashMap<String, Object>();
        retMap.put("name",name);
        retMap.put("age",age);


        return retMap;
    }

    /**
     * 删除学生
     * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/1
     * 请求方式:Delete
     * @param id
     * @return
     */
    @DeleteMapping(value = "/springBoot/student/{id}")
    public Object removeStudent(@PathVariable("id") Integer id) {

        return "删除的学生id为:" + id;
    }

    /**
     * 修改学生信息
     * 请求地址:http://localhost:9090/014-springboot-restful/springBoot/student/2
     * 请求方式:Put
     * @param id
     * @return
     */
    @PutMapping(value = "/springBoot/student/{id}")
    public Object modifyStudent(@PathVariable("id") Integer id) {

        return "修改学生的id为" + id;
    }

    @GetMapping(value = "/springBoot/student/{id}")
    public Object queryStudent(@PathVariable("id") Integer id) {

        return "查询学生的id为" + id;
    }
}

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

 

 

 

小结: 

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

4、请求冲突

解决办法:

  • 改路径
  • 改请求方式
@RestController
public class RESTfulController {


    /**
     * id:订单标识
     * status:订单状态
     * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/order/1/1001
     * @param id
     * @param status
     * @return
     */
    @GetMapping(value = "/springBoot/order/{id}/{status}")
    public Object queryOrder(@PathVariable("id") Integer id,
                             @PathVariable("status") Integer status) {

        Map<String,Object> map = new HashMap<String,Object>();

        map.put("id",id);
        map.put("status",status);

        return map;
    }

    /**
     * id:订单标识
     * status:订单状态
     * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1/order/1001
     * @param id
     * @param status
     * @return
     */
    @GetMapping(value = "/springBoot/{id}/order/{status}")
    public Object queryOrder1(@PathVariable("id") Integer id,
                              @PathVariable("status") Integer status) {
        Map<String,Object> map = new HashMap<String,Object>();

        map.put("id",id);
        map.put("status",status);

        return map;
    }

    /**
     * id:订单标识
     * status:订单状态
     * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1001/order/1
     * @param id
     * @param status
     * @return
     */
    @GetMapping(value = "/springBoot/{status}/order/{id}")
    public Object queryOrder2(@PathVariable("id") Integer id,
                              @PathVariable("status") Integer status) {
        Map<String,Object> map = new HashMap<String,Object>();

        map.put("id",id);
        map.put("status",status);

        return map;
    }

    /**
     * id:订单标识
     * status:订单状态
     * 请求路径:http://localhost:9090/015-springboot-restful-url-conflict/springBoot/1001/order/1
     * @param id
     * @param status
     * @return
     */
    @PostMapping(value = "/springBoot/{status}/order/{id}")
    public Object queryOrder3(@PathVariable("id") Integer id,
                              @PathVariable("status") Integer status) {
        Map<String,Object> map = new HashMap<String,Object>();

        map.put("id",id);
        map.put("status",status);

        return map;
    }




    /**
     * query1和query2两个请求路径会发生请求路径冲突问题
     * query3与query1和query2发生请求不冲突
     * 注意:虽然两个路径写法改变了,但是由于传递的两个参数都是int值,所以不知道该交给哪个请求进行处理
     *      就会出现匹配模糊不清的异常,所以要想解决冲突,有两种方式:
     *      1.修改请求路径
     *      2.修改请求方式
     */
}

 

 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. 不是资源的信息(参数),一般不用斜杠传参数,采用质询参数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于Spring的生产级别的应用程序的框架。它简化了Spring应用程序的配置和部署过程,并提供了一种快速开发的方式。在整合Spring MVC项目时,你可以使用Spring Boot的自动配置功能来简化配置。 首先,你需要在pom.xml文件中添加Spring Boot和Spring MVC的依赖。然后,你可以创建一个MVCController类,使用各种注解来接收不同类型的请求。例如,你可以使用@RestController注解来标记该类,并使用@RequestMapping注解来指定请求的路径和请求方法。你还可以使用@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解来指定特定的请求方法。 在处理请求时,你可以返回不同类型的数据。例如,你可以返回字符串,可以使用@RequestMapping注解的value属性来指定返回的字符串。你还可以使用Model对象来传递数据到视图中。 总结起来,整合Spring Boot和Spring MVC项目的步骤包括添加依赖、创建MVCController类并使用注解接收不同类型的请求,以及返回不同类型的数据。这样可以简化配置和开发过程,并提高开发效率。 #### 引用[.reference_title] - *1* [springboot整合springmvc项目](https://blog.csdn.net/bluewelkin/article/details/112470271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [11.4 SpringBoot 整合 SpringMVC](https://blog.csdn.net/Bug_marker/article/details/121418551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [springboot 整合springmvc](https://blog.csdn.net/zxc472504515/article/details/124626824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值