您的位置:首页 > 编程语言 > Java开发

SpringBoot基础教程2-1-1 搭建RESTful风格Web服务

2018-07-06 13:13 597 查看

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,直接官网下载,Ultimate版本,傻瓜式安装

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模拟

@Component
public class UserDao {
// 数据层:查询数据库,这里为了简单用Map模拟
private static Integer count = 0;

// 线程安全的Map
private static Map<Integer, User> 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<User> 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<User> findList();
User addUser(User user);
User updateUser(User user);
boolean deleteByUserId(Integer userId);
}

@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;

@Override
public User findByUserId(Integer userId) {
return userDao.findByUserId(userId);
}

@Override
public List<User> 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")
@RestController
public 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<User> 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十分钟


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Spring Boot