千家信息网

如何理解Java restful接口开发

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍"如何理解Java restful接口开发",在日常操作中,相信很多人在如何理解Java restful接口开发问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2024年11月22日如何理解Java restful接口开发

这篇文章主要介绍"如何理解Java restful接口开发",在日常操作中,相信很多人在如何理解Java restful接口开发问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何理解Java restful接口开发"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 1、RESTful 简介

    • a>资源

    • b>资源的表述

    • c>状态转移

  • 2、RESTful 的实现

    • 3、HiddenHttpMethodFilter

      • 4、RESTful 案例

        • 4.1、需求

        • 4.2、git 代码位置

        • 4.3、UserController

        • 4.4、添加 HiddenHttpMethodFilter

        • 4.5、测试效果


      1、RESTful 简介

      REST:Representational State Transfer,表现层资源状态转移。

      a>资源

      资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个 资源可以由一个或多个 URI 来标识。URI 既是资源的名称,也是资源在 Web 上的地址。对某个资源感兴趣的客户端应用,可以通过资源的 URI 与其进行交互。

      b>资源的表述

      资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端-服务器端之间转移(交换)。资源的表述可以有多种格式,例如 HTML/XML/JSON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常使用不同的格式。

      c>状态转移

      状态转移说的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。

      2、RESTful 的实现

      具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。

      它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

      REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

      操作传统方式REST 风格
      查询操作getUserById?id=1user/1-->get 请求方式
      保存操作saveUseruser-->post 请求方式
      删除操作deleteUser?id=1user/1-->delete 请求方式
      更新操作updateUseruser-->put 请求方式

      3、HiddenHttpMethodFilter

      由于浏览器只支持发送 get 和 post 方式的请求,那么该如何发送 put 和 delete 请求呢?

      SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求。

      HiddenHttpMethodFilter 处理 put 和 delete 请求的条件:

      • 当前请求的请求方式必须为 post

      • 前请求必须传输请求参数_method

      满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method 的值,因此请求参数_method 的值才是最终的请求方式。

      在 web.xml 中注册 HiddenHttpMethodFilter

          HiddenHttpMethodFilter    org.springframework.web.filter.HiddenHttpMethodFilter    HiddenHttpMethodFilter    /*

      使用注意:

      目前为止,SpringMVC 中提供了两个过滤器:CharacterEncodingFilter 和 HiddenHttpMethodFilter

      在 web.xml 中注册时,必须先注册 CharacterEncodingFilter,再注册 HiddenHttpMethodFilter

      原因:

      在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字符集的

      request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作:

      String paramValue = request.getParameter(this.methodParam);

      4、RESTful 案例

      4.1、需求

      通过 restfull 实现用户的增删改查,需要提供 5 个接口。

      接口method描述
      /user/listGET获取用户列表
      /user/{userId}GET根据用户 id 获取用户信息
      /userPOST新增用户信息
      /userPUT保存用户信息
      /user/{userId}DELETE删除用户信息

      4.2、git 代码位置

      https://gitee.com/javacode2018/springmvc-series

      4.3、UserController

      UserController 中实现了需求中提到的 4 个接口,大家重点看下每个接口的方法上用到的注解。

      @RestControllerpublic class UserController {    private List userList = new ArrayList<>();     {        userList.add(new User(1, "Spring高手系列"));        userList.add(new User(2, "SpringMVC系列"));    }     @GetMapping("/user/list")    public List list() {        System.out.println("list()");        return userList;    }     @GetMapping("/user/{userId}")    public User getUser(@PathVariable("userId") Integer userId) {        System.out.println("getUser()");        for (User user : userList) {            if (user.getUserId().equals(userId)) {                return user;            }        }        return null;    }     @PostMapping(value = "/user", produces = "text/html;charset=UTF-8")    public String add(User user) {        System.out.println("add()");        this.userList.add(user);        return "新增成功";    }     @PutMapping(value = "/user", produces = "text/html;charset=UTF-8")    public String modify(User user) {        System.out.println("modify()");        for (User item : userList) {            if (item.getUserId().equals(user.getUserId())) {                item.setName(user.getName());            }        }        return "修改成功";    }     @DeleteMapping(value = "/user/{userId}", produces = "text/html;charset=UTF-8")    public String delete(@PathVariable("userId") Integer userId) {        System.out.println("delete()");        Iterator iterator = userList.iterator();        while (iterator.hasNext()) {            User user = iterator.next();            if (user.getUserId().equals(userId)) {                iterator.remove();            }        }        return "删除成功";    }      public static class User {        private Integer userId;        private String name;         public User() {        }         public User(Integer userId, String name) {            this.userId = userId;            this.name = name;        }         public Integer getUserId() {            return userId;        }         public void setUserId(Integer userId) {            this.userId = userId;        }         public String getName() {            return name;        }         public void setName(String name) {            this.name = name;        }         @Override        public String toString() {            return "User{" +                    "userId=" + userId +                    ", name='" + name + '\'' +                    '}';        }    }}

      4.4、添加 HiddenHttpMethodFilter

      HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();

      4.5、测试效果

      将项目发布到 tomcat,如下图,跑一下 UserController.http 中的 5 个用例,点击每个用户中的绿色箭头即可运行,注意下后面 3 个用例都是 POST 方式提交的,但是参数中多了一个_method 参数用来指定提交的类型,这个参数会被HiddenHttpMethodFilter 解析。

      到此,关于"如何理解Java restful接口开发"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

      资源 方式 接口 参数 用户 服务器 服务 状态 开发 信息 客户 客户端 方法 风格 学习 成功 地址 格式 需求 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信通杯网络安全竞赛 济宁软件开发制作 互联网去银行科技 探针 数据库 火山移动软件开发 服务器上浏览器安全 软件开发赚钱吗 比如编程 计算机网络安全服务中 保定港冀网络技术有限公司 软件开发电脑上市公司 开票软件的服务器地址 小区车辆信息管理数据库设计 南昌数据库培训哪里好 数据库查询条件用不用加引号 暗黑2 ns怎么更换服务器 杭州足浴软件开发系统 网上下载源码怎么修改数据库 奇游加速器服务器地址 技术网络技术服务包括什么 江苏通信软件开发设施应用 成都群控云控软件开发商 全球互联网总服务器表面掌握人 阿里巴巴演示服务器切换速度 青海高速网络安全吗 天津软件开发工资很低 山西精英网络技术服务常见问题 中华人民共和国网络安全监 深圳国内网络安全厂家 为了网络安全什么都禁止使用 新野系统软件开发公司
      0