什么是Restful开发?
原来的参数请求方式: /login?name=jack
rest参数请求:/login/jack
REST是面向资源的,而资源是通过URI进行暴露,URI的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过HTTP动词来体现,所以REST通过URI暴露资源时,会强调不要在URI中出现动词。所以应该使用请求方式来代表操作类型的不同,而资源路径不要作出改变!
比如:左边的是错误的设计,而右边是正确的
GET /rest/api/getDogs --> GET /rest/api/dogs 获取所有小狗狗
GET /rest/api/addDogs --> POST /rest/api/dogs 添加一个小狗狗
GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一个小狗狗
GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 删除一个小狗狗
前言
以下文章是个人做的学习笔记,希望可以帮助到有学习这方面知识的小伙伴,如有帮助欢迎,点赞、收藏、关注哦^_^
Springboot+MP结合Restful开发步骤
1、实体类,这里使用了Lombok注解,自动生成getter和setter方法,还有全参和无参构造方法
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("users")
public class User {
private int id;
private String uname;
private String code;
private String password;
}
2、Dao层(继承了Mybatis-plus提供的BaseMapper接口)
@Mapper
public interface UserDao extends BaseMapper<User> {
}
3、Service接口和实现类(继承了Mybatis-plus提供的IService<T>接口)
//接口
public interface IUserService extends IService<User> {
}
//实现类
@Service
public class UserServiceImp extends ServiceImpl<UserDao, User> implements IUserService {
}
4、编写工具类R,用于封装后端返回给前端的数据格式
@Data
//该类为工具类,用于封装后端返回到前端的数据
public class R {
//status代表请求成功与否
private boolean status;
//用户存储后端返回过来的数据
private Object data;
//返回前端消息,如:“添加成功”,“服务器出错”
private String message;
public R(){}
public R(boolean status,Object data){
this.status = status;
this.data = data;
}
public R(boolean status, String message){
this.status = status;
this.message = message;
}
public R(boolean status, Object data,String message){
this.status = status;
this.data = data;
this.message = message;
}
}
5、Controller层
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService iUserService;
@GetMapping
//获取所有用户信息
public R getAll(){
List<User> list = iUserService.list();
return new R(true,list);
}
//根据用户名和密码查询
@GetMapping("{code}/{password}")
public R getUserById(@PathVariable String code, @PathVariable String password){
QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("code", code).eq("password", password);
User one = iUserService.getOne(qw);
return new R(true,one,"添加成功");
}
//分页查询用户(page/当前页/页面大小)
@GetMapping("page/{current}/{size}")
public R pageList(@PathVariable String current, @PathVariable String size){
IPage<User> iPage = new Page(Integer.valueOf(current),Integer.valueOf(size));
List<User> records = iUserService.page(iPage).getRecords();
System.out.println(iPage.getTotal());
System.out.println(iPage.getPages());
return new R(true,records);
}
//添加用户
@PostMapping
public R addUser(@RequestBody User user){
return new R( iUserService.save(user),null);
}
//修改用户
@PutMapping
public R updateUser(@RequestBody User user){
return new R(iUserService.updateById(user),null);
}
//根据Id删除用户
@DeleteMapping("{id}")
public R delete(@PathVariable int id){
QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("id", id);
boolean remove = iUserService.remove(qw);
return new R(remove,remove?"删除成功^_^":"删除失败-_-");
}
}
以下使用Postman软件模拟请求,测试写好的业务代码
-
测试Get方法查询所有用户信息
-
使用Get方式分页查询用户信息(查询第一页,每页显示2条数据)
-
使用Get方法条件查询用户信息(根据用户名和密码查询)
-
使用Post请求添加用户信息
-
使用Delete请求方式,删除一条用户信息
情况1:删除失败
情况2:删除成功