博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot基础教程2-1-1 搭建RESTful风格Web服务
阅读量:6273 次
发布时间:2019-06-22

本文共 4074 字,大约阅读时间需要 13 分钟。

hot3.png

1. 概述

RESTful架构风格规定,数据的元操作,即CRUD(增删查改)操作,分别对应于HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口,仅通过HTTP方法,就可以完成对数据的所有增删查改工作。

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。

本文中例子RESTful API具体设计如下:

2. 本节重点

  • RESTful风格介绍
  • 使用SpringBoot,快速搭建RESTful风格Web服务

3. 工具

  • IntelliJ IDEA,直接官网下载,,傻瓜式安装
  • Maven,IntelliJ IDEA自带无需安装
  • Springboot ,版本2.0.3.RELEASE
  • Postman,测试工具,(密码:sc1e),解压无需安装

4. 代码分析

新建User实体类

public class User {    private Integer userId;    private String name;    private Integer age;    private String address;    // 省略 get set方法}

快捷键Alt+Insert,可以生成构造器/Getter/Setter等

新建DAO层,查询数据库,这里为了简单用Map模拟

@Componentpublic class UserDao {    // 数据层:查询数据库,这里为了简单用Map模拟    private static Integer count = 0;    // 线程安全的Map    private static Map
userMap = Collections.synchronizedMap(new HashMap<>()); static { // 静态代码块,第一次初始化类时被调用 // 初始化userMap userMap.put(++count, User.builder().userId(count).name("Mkeeper").age(28).address("wuhan").build()); userMap.put(++count, User.builder().userId(count).name("Jam").age(22).address("beijing").build()); userMap.put(++count, User.builder().userId(count).name("Li").age(18).address("shanghai").build()); } public User findByUserId(Integer userId){ return userMap.get(userId); } public List
findList(){ return new ArrayList<>(userMap.values()); } public User addUser(User user){ user.setUserId(++count); userMap.put(count, user); return user; } public User updateUser(User user){ userMap.put(user.getUserId(), user); return user; } public boolean deleteByUserId(Integer userId){ userMap.remove(userId); return true; }}

新建service层,包括接口与实现

public interface UserService {     // 服务层:处理业务逻辑     User findByUserId(Integer userId);     List
findList(); User addUser(User user); User updateUser(User user); boolean deleteByUserId(Integer userId);}
@Servicepublic class UserServiceImpl implements UserService {    @Autowired    private UserDao userDao;    @Override    public User findByUserId(Integer userId) {        return userDao.findByUserId(userId);    }    @Override    public List
findList() { return userDao.findList(); } @Override public User addUser(User user) { return userDao.addUser(user); } @Override public User updateUser(User user) { return userDao.updateUser(user); } @Override public boolean deleteByUserId(Integer userId) { return userDao.deleteByUserId(userId); }}

新建操作user的接口

@RequestMapping("/users")@RestControllerpublic class UserController {    // 入口:处理相应URL    @Autowired    private UserService userService;    @GetMapping("/{userId}")    public User findByUserId(@PathVariable Integer userId){        // 处理“/users/{userId}”的Get请求,获取user信息        // url中的id可通过@PathVariable绑定到函数的参数中        return userService.findByUserId(userId);    }    @GetMapping("/")    public List
findList(){ // 处理“/users/”的Get请求,获取用户列表信息 // 还可以通过@RequestParam从页面中传递参数来进行查询条件或者翻页信息的传递 return userService.findList(); } @PostMapping("/") public User addUser(@RequestBody User user){ // 处理"/users/"的POST请求,用来创建User // 除了@RequestBody绑定参数之外,还可以通过@RequestParam从页面中传递参数 return userService.addUser(user); } @PutMapping("/") public User updateUser(@RequestBody User user){ // 处理"/users/{id}"的PUT请求,用来更新User信息 return userService.updateUser(user); } @DeleteMapping("/{userId}") public boolean deleteByUserId(@PathVariable Integer userId){ // 处理"/users/{id}"的DELETE请求,用来删除User return userService.deleteByUserId(userId); }}

推荐一个查询URL的快捷键:Ctrl+Shift+Alt+N,然后输入url,可以快速查找对应Controller;该快捷键还可以查方法。

测试结果,这里只展示新增的测试结果,其他接口测试还请读者自行实践

5. 工程目录

6. 结束语

微服务盛行,RESTful风格接口大行其道,实践后,才知道其实不复杂,原理是一样的。有任何建议,欢迎留言探讨,。


欢迎关注博主公众号:Java十分钟

欢迎关注博主公众号

转载于:https://my.oschina.net/Mkeeper/blog/1841375

你可能感兴趣的文章
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
Android下创建一个sqlite数据库
查看>>
数组<=>xml 相互转换
查看>>
MFC单文档应用程序显示图像
查看>>
poj 2777(线段树的节点更新策略)
查看>>
Swift-EasingAnimation
查看>>
[翻译] BKZoomView
查看>>
C++类设计的一些心得
查看>>
tableVIew删除时的delete按钮被挡住时重写的方法
查看>>
读cookie中文字符乱码问题
查看>>
招募译者翻译并发数据结构
查看>>
普通表转换为分区表
查看>>
Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
查看>>
性能优化总结(六):预加载、聚合SQL应用实例
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>