In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-20 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
这篇文章主要介绍"如何理解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、添加 HiddenHttpMethodFilterHiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
4.5、测试效果
将项目发布到 tomcat,如下图,跑一下 UserController.http 中的 5 个用例,点击每个用户中的绿色箭头即可运行,注意下后面 3 个用例都是 POST 方式提交的,但是参数中多了一个_method 参数用来指定提交的类型,这个参数会被HiddenHttpMethodFilter 解析。
到此,关于"如何理解Java restful接口开发"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.