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安装

相关推荐
狸克先生6 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
sinat_384241098 分钟前
在有网络连接的机器上打包 electron 及其依赖项,在没有网络连接的机器上安装这些离线包
javascript·arcgis·electron
baiduopenmap20 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
loooseFish28 分钟前
小程序webview我爱死你了 小程序webview和H5通讯
前端
小牛itbull32 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i40 分钟前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
533_43 分钟前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js
guokanglun1 小时前
空间数据存储格式GeoJSON
前端
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
zhang-zan1 小时前
nodejs操作selenium-webdriver
前端·javascript·selenium