• Axios前后端交互规范


    Axios前后端交互规范

    基于Axios封装的http通信模块

    在main.js中导入了http对象, 并且注册到了Vue的原型对象上面, 取名为$http

    有了上面的代码前提

    我们可以在任意一个Vue组件中使用

    this.$http发起http请求

    GET请求 (查询)

    情况1: 根据id查询一个对象

    因为只有一个参数id, 所有可以使用占位符的方式将id拼接在地址后面传

    后端取得时候, 注意在地址里面取参数

    情况2: 条件+分页查询一个集合

    参数是一个对象, 里面包含多个条件和分页参数

    必须把参数放在 {params: {}}

    这种方式得参数会拼接在url后面

    1. this.$http.get('url', {params: 参数})
    2. .then((data) => {
    3. })

    POST请求 (添加)

    这种方式得参数会放在请求体里面

    1. this.$http.post('url', 参数)
    2. .then((data) => {
    3. })

    后端需要使用@RequestBody请求体里面获取数据, 否则数据取不到

    PUT请求 (修改)

    参数得传和取同POST请求

    1. this.$http.put('', 参数)
    2. .then((data) => {
    3. })

    DELETE请求 (删除)

    这种请求一般也是携带id, 可以使用占位符得方式

    1. this.$http.delete('')
    2. .then((data) => {
    3. })

    后端控制器

    处理get请求用@GetMapping

    处理post请求用@PostMapping,参数使用@RequestBody从请求体获取

    处理put请求用@PutMapping,参数使用@RequestBody从请求体获取

    处理delete请求用@DeleteMapping

    所有得控制器方法得返回值统一使用封装得ResponseData类型

    所有得控制器方法中只有一行return 代码

    这样控制器层得代码会非常干净,整洁

    所有得业务代码全部交给Service层取实现

    1. @RestController
    2. @RequestMapping("/api/user")
    3. public class UserController {
    4. @Resource
    5. private UserService userService;
    6. @GetMapping("/list")
    7. public ResponseData list(UserPage userPage){
    8. return userService.selectPage(userPage);
    9. }
    10. @DeleteMapping("/del/{id}")
    11. public ResponseData del(@PathVariable("id") Integer id){
    12. return userService.logicDeleteById(id);
    13. }
    14. @GetMapping("/detail/{id}")
    15. public ResponseData detail(@PathVariable("id") Integer id){
    16. return userService.selectById(id);
    17. }
    18. @PutMapping("/edit")
    19. public ResponseData edit(@RequestBody User user){
    20. return userService.edit(user);
    21. }
    22. @PostMapping("/login")
    23. public ResponseData login(@RequestBody User user){
    24. return userService.login(user);
    25. }
    26. }

    因为控制器层方法得返回值是ResponseData类型

    这里直接返回调用得service层方法得返回值

    那么,编写Service层接口和实现类得时候,也需要统一Service层全部返回ResponseData类型

    1. public interface UserService {
    2. ResponseData selectPage(UserPage userPage);
    3. ResponseData logicDeleteById(Integer id);
    4. ResponseData selectById(Integer id);
    5. ResponseData login(User user);
    6. ResponseData edit(User user);
    7. }

    1. @Service
    2. public class UserServiceImpl implements UserService {
    3. @Resource
    4. private UserMapper userMapper;
    5. @Override
    6. public ResponseData selectPage(UserPage userPage){
    7. QueryWrapper qw=new QueryWrapper();
    8. qw.likeRight(StringUtils.hasText(userPage.getUsername()),"username",userPage.getUsername());
    9. qw.likeRight(StringUtils.hasText(userPage.getIdCode()),"id_code",userPage.getIdCode());
    10. qw.likeRight(StringUtils.hasText(userPage.getMobile()),"mobile",userPage.getMobile());
    11. qw.eq("is_delete", 0);
    12. return ResponseData.success(userMapper.selectPage(userPage,qw));
    13. }
    14. @Override
    15. public ResponseData logicDeleteById(Integer id) {
    16. User user = new User();
    17. user.setId(id);
    18. user.setIsDelete(1);
    19. return ResponseData.success(userMapper.updateById(user) > 0 ? true: false);
    20. }
    21. @Override
    22. public ResponseData selectById(Integer id) {
    23. return ResponseData.success(userMapper.selectById(id));
    24. }
    25. @Override
    26. public ResponseData login(User user) {
    27. User dbUser = userMapper.selectByUsername(user.getUsername());
    28. if (dbUser == null){
    29. throw new CustomException(ResponseMsg.USER_NOT_EXIST);
    30. }else {
    31. if(!user.getPassword().equals(dbUser.getPassword())){
    32. throw new CustomException(ResponseMsg.PASSWORD_ERROR);
    33. }
    34. }
    35. String token = TokenUtil.getToken(dbUser);
    36. dbUser.setToken(token);
    37. return ResponseData.success(dbUser);
    38. }
    39. @Override
    40. public ResponseData edit(User user) {
    41. return ResponseData.success(userMapper.updateById(user));
    42. }
    43. }

    在调试前后端通信得时候,一定要学会浏览器F12功能里面得网络

  • 相关阅读:
    ESP32 分区表修改导致重启的问题
    【ASP.NET Core】选项类的依赖注入
    C语言-循环语句
    UE4 TextRender显示中文方法
    并发的三大特性
    java-php-python--损失赔偿保险的客户情况登记及管理-计算机毕业设计
    第一章、Spring基础
    C++编程题目------平面上的最接近点对(分治算法)
    Redis集群什么情况下整个集群不可用了?
    拒绝水文!八大排序(三)【适合初学者】快速排序
  • 原文地址:https://blog.csdn.net/qq_57420582/article/details/126860338