Axios在前后端的使用

1、后端平台搭建

关于后端平台搭建,参考博文

https://blog.csdn.net/daniaoxp/article/details/119295619

在搭建过程中需要用到lombok插件,该插件的安装参考下面博文

https://blog.csdn.net/daniaoxp/article/details/119592904

在该博文中提到了使用该插件后可以使用@DATA注释,该注释提供类的get、set、equals、hashCode、canEqual、toString方法,非常方便,这里介绍该插件的另外一个注释**@Log4j2**,该注释可以实现打印功能。

image-20210811103641798

完成后实验效果

image-20210811085451163

同时在控制台看到OK的打印信息

image-20210811103739195

由于要跟前端结合,要解决跨域问题,添加**@CrossOrigin**注释

image-20210811103829581

2、前端平台搭建

2.1 前端页面搭建

由于前端比较简单,也采用idea搭建,先搭建一个空项目,空项目搭建过程可参看博文

https://blog.csdn.net/daniaoxp/article/details/119295619

空项目搭建完成后新建子模块,如下操作即可。

image-20210811092902717

image-20210811092934243
image-20210811093018530

  • 在main文件夹下新建webapp文件夹

image-20210811093120923

  • webapp文件夹下新建vue文件夹

image-20210811093208868

  • vue文件夹下新建js文件夹

image-20210811093403852

  • vue文件夹下新建HTML文件,命名为first.html,注意此时该文件与js文件夹平行

image-20210811134419392

2.2 引入axios

打开axios网页

http://www.axios-js.com/zh-cn/docs/

找到下图的网址,复制粘贴到浏览器

image-20210811093649748

https://unpkg.com/axios/dist/axios.min.js
  • 出现axios源码

image-20210811093730981

  • 右键,页面另存为指定位置

image-20210811093756081

  • 保存

image-20210811093817723

  • 将该问件复制到js文件夹

image-20210811093942386

  • 打开first.html文件,根据下图方式引入axios

image-20210811094233876

<script src="js/axios.min.js"></script>

3、实例演示

3.1 执行 GET 请求

3.1.1 前端操作

first.html页面中完成以下代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Axios在前后端的使用</title>
</head>
<body>
    <div>
        <h1>Axios应用</h1>
    </div>
</body>
</html>
<script src="js/axios.min.js"></script>
<script>
    axios.get("http://localhost:8080/hello?id=1&name=jack")
        .then(function (response) {
            console.log(response);
        })
        .catch(function (error) {
            console.log(error);
        });
</script>

第15行:“http://localhost:8080/hello?id=1&name=jack” 中的"http://localhost:8080/hello"一定要跟后端对应,该语句可向后端发送**“id=1&name=jack”** 信息。把前端运行起来,建议使用谷歌浏览器。(在运行前端前,先把后端运行起来)

image-20210811104708173

  • 打开谷歌浏览器后,按F12,出现如下图

image-20210811104940485

  • 刷新,出现后端信息

image-20210811105234980

  • 同时看下后端控制台,说明也运行了

image-20210811105306772

前端怎么样得取出后端中**“Hello Springboot demo01!”**的信息呢?在前端中加入这么一句。

image-20210811105441890

再刷新浏览器,在浏览器控制台中出现后端的信息了。

image-20210811105512068

3.1.2 后端操作

first.html页面第15行:“http://localhost:8080/hello?id=1&name=jack” 中,"id=1&name=jack"就是要发给后端的信息,前端已经发送了,后端怎么接收呢,在后端程序中修改这两行。

image-20210811110106973

public class HelloController {
    @RequestMapping("/hello")
    public String sayHello01(@RequestParam("id") String id,@RequestParam("name") String name){
        log.info("OK");
        log.info("id:{},name:{}",id,name);
        return "Hello Springboot demo01!";
    }
}

后端重新部署运行,刷新浏览器,看下后端的控制台,得到了前端信息。

image-20210811110215733

3.2 执行 POST 请求

3.2.1 前端操作

在前端的html页面中完成以下内容,主要是第14行到第26行,第15行的地址注意一下,是"http://localhost:8080/test01"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Axios在前后端的使用</title>
</head>
<body>
    <div>
        <h1>Axios应用</h1>
    </div>
</body>
</html>
<script src="js/axios.min.js"></script>
<script>
    axios.post("http://localhost:8080/test01", {
        firstName: 'Fred',
        lastName: 'Flintstone'
    })
        .then(function (response) {
            console.log(response);
            console.log(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
</script>

post请求发送信息的格式是采用json格式,例如

{
     firstName: 'Fred',
     lastName: 'Flintstone'
}

接下去看后端怎么接收

3.2.2 后端操作

后端接收采用实体类方式接收,所以新建User类,在新建该类前先新建entity包

image-20210811141544358

可以采用这种方式一下子完成新建包和类的过程

image-20210811141611314

在类中完成以下代码,使用@DATA注解,非常方便

@Data
public class User {
    private String firstName;
    private String lastName;
}

回到HelloController类,完成以下代码

image-20210811143205543

 @PostMapping("/test01")
    public String test01(@RequestBody User user){
        log.info("firstName:{},lastName:{}",user.getFirstName(),user.getLastName());
        return "Hello Springboot demo02!";
    }

运行后端,再运行前端,刷下浏览器,在浏览器控制台中出现了后端发送的信息

image-20210811143327745

在后端出现前端发来的信息

image-20210811143338558

3.3 执行 PUT 请求

put请求跟post请求比较相似。

3.3.1 前端操作

在前端的html页面中完成以下内容,主要是第14行到第26行,第15行的地址注意一下,是"http://localhost:8080/test02"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Axios在前后端的使用</title>
</head>
<body>
    <div>
        <h1>Axios应用</h1>
    </div>
</body>
</html>
<script src="js/axios.min.js"></script>
<script>
    axios.put("http://localhost:8080/test02", {
        firstName: 'Fred',
        lastName: 'Flintstone'
    })
        .then(function (response) {
            console.log(response);
            console.log(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
</script>

put请求发送信息的格式是采用json格式,例如

{
     firstName: 'Fred',
     lastName: 'Flintstone'
}

接下去看后端怎么接收

3.3.2 后端操作

image-20210811150109709

 @PutMapping("/test02")
    public String test02(@RequestBody User user){
        log.info("firstName:{},lastName:{}",user.getFirstName(),user.getLastName());
        return "Hello Springboot demo03!";
    }

运行后端,再运行前端,刷下浏览器,在浏览器控制台中出现了后端发送的信息

image-20210811150202044

image-20210811150214900

4、补充说明

在前端中一起发送三个请求,如图。

image-20210811150632272

在后端看下响应

image-20210811150728318

确实都收到响应信息,回看前端代码,有很多冗余,比如"http://localhost:8080",都要用到。因此可在前端进行优化。

image-20210811151546710

<script>  
var instance=axios.create({
        baseURL:"http://localhost:8080"
    });

    instance.get("/hello?id=1&name=jack")
        .then(function (response) {
            console.log(response);
            console.log(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
    instance.post("/test01", {
        firstName: 'Fred',
        lastName: 'Flintstone'
    })
        .then(function (response) {
            console.log(response);
            console.log(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
    instance.put("http://localhost:8080/test02", {
        firstName: 'TOM',
        lastName: 'Stone'
    })
        .then(function (response) {
            console.log(response);
            console.log(response.data);
        })
        .catch(function (error) {
            console.log(error);
        });
</script>

实验效果跟原来一样。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐