Vue--Axios详解

一、Axios是什么?

Axios是一种异步请求技术,核心作用就是用来给页面 发送异步请求的,并获取对应数据在页面中的渲染,是页面局部更新的Ajax封装来的。

特性

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御XSRF

二、Controller层注解详解

@RequestMapping

@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法,此处需注意@RequestMapping用在类上可以没有,但是用在方法上必须有。
@ResponseBody 的作用其实是将 java 对象转为 json 格式的数据。@ResponseBody 注解的作用是将 controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到 response对象的 body 区,通常用来返回 JSON 数据或者是 XML 数据。

@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象,

封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

  • @PostMapping 等价于 @RequestMapping(method = RequestMethod.POST)

  • @GetMapping 等价于 @RequestMapping(method = RequestMethod.GET)

  • @PutMapping 等价于 @RequestMapping(method = RequestMethod.PUT)

  • @DeleteMapping 等价于 @RequestMapping(method = RequestMethod.DELETE)

  • 1、@Controller @Controller 用来响应页面,表示当前的类为控制器。 2、@RestController @RestController 是@ResponseBody和@Controller的结合 表明当前类是控制器且返回的是一组数据,不是页面 3、@Autowired 这个注解的作用是将其他的类,接口引入,类似于之前的类的初始化等,用这个注解,类中或接口的方法就可以直接调用了。 4、@RequestMapping 当前台界面调用Controller处理数据时候告诉控制器怎么操作 作用:URL映射。 5、@GetMapping @RequestMapping(method = RequestMethod.GET)的简写 作用:对应查询,表明是一个查询URL映射 6、@PostMapping @RequestMapping(method = RequestMethod.POST)的简写 作用:对应增加,表明是一个增加URL映射 7、@PutMapping @RequestMapping(method = RequestMethod.PUT)的简写 作用:对应更新,表明是一个更新URL映射 8、@DeleteMapping @RequestMapping(method = RequestMethod.DELETE)的简写 作用:对应删除,表明是一个删除URL映射

三、Axios 前端发送get请求

<script>
     axios.get('http://localhost:8080/user/hello').then(function (resp){
         console.log(resp);
     }).catch(function (error){
         console.log(error);
     })
</script>

后端响应请求,数据返回给前端

@RestController
@CrossOrigin  //解决跨域问题
@RequestMapping("/user")
public class HelloController {

     private static final Logger LOG = LoggerFactory.getLogger(HelloController.class);

     @GetMapping("/hello")
     public String hello(){
          LOG.info("进入了hello方法");
          return "恭喜您进入了hello方法";
     }
}

响应结果如下

四、Axios 前端发送post请求

<script>
    axios.post('http://localhost:8080/user/user1',{
        id:'001',
        name:'恕瑞玛'
    }).then(function (response){
        console.log(response);
    }).catch(function (error){
        console.log(error);
    })
</script>

后端代码

@RestController
@CrossOrigin  //解决跨域问题
@RequestMapping("/user")
public class HelloController {

     private static final Logger LOG = LoggerFactory.getLogger(HelloController.class);
     @PostMapping("/user1")
     public String user1(@RequestBody User user){
          LOG.info("进入了user1方法");
          LOG.info("id:{} name:{}",user.getId(),user.getName());
          return "恭喜您进入了user1方法";
     }
}

响应结果在后端控制台显示

五、Axios拦截器

1.创建实例封装BaseURL

 //axios创建实例
    const myAxios = axios.create({
        baseURL:'http://localhost:8080',
        timeout:1000,
    })

2.axios 请求拦截器

axios请求拦截器主要是发送请求之前要处理的事情

   //axios创建实例
    const myAxios = axios.create({
        baseURL:'http://localhost:8080',
        timeout:1000,
    })

    //添加请求拦截器
    myAxios.interceptors.request.use(function (config){
        //在发送之前做些什么
        config.url += "?token=1234";
        return config
    });

浏览器效果如下

可以看到,在发送请求之前,预处理添加了token令牌,这就是响应拦截器的作用

3.axios 响应拦截器

前端添加响应拦截器

//axios创建实例
    const myAxios = axios.create({
        baseURL:'http://localhost:8080',
        timeout:1000,
    })
//添加响应拦截器
    myAxios.interceptors.response.use(function (response){
        //对响应数据做点什么
        alert('恭喜你,你的项目被攻击了');
        console.log('进入了响应拦截器',response);
        return response;
    })

浏览器效果如下

可以看到,后端发出的get请求,到前端,前端响应前拦截器拦截,并处理。

总结

请求拦截器是

六、Axios 指路

https://www.axios-http.cn/docs/intro

axios安装

相关推荐
ZJ_.几秒前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营5 分钟前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood30 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端32 分钟前
0基础学前端-----CSS DAY9
前端·css
joan_8536 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
还是大剑师兰特1 小时前
什么是尾调用,使用尾调用有什么好处?
javascript·大剑师·尾调用
m0_748236111 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248941 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235612 小时前
从零开始学前端之HTML(三)
前端·html