vue 调用 RESTful风格接口操作
首先是简单的java接口代码
写了四个让前端请求的接口,以下为代码
@GetMapping("/v1/user/{username}/{password}") publicResultlogin2(@PathVariable("username")Stringusername,@PathVariable("password")Stringpassword){ returnResult.succResult(200,username+"--"+password); } @PostMapping("/v1/user") publicResultlogin3(@RequestBodyUseruser){ returnResult.succResult(200,"ok",user); } @PutMapping("/v1/user") publicResultputUser(@RequestBodyUseruser){ returnResult.succResult(200,user); } @DeleteMapping("/v1/user/{id}") publicResultdelete(@PathVariableIntegerid){ returnResult.succResult(200,id); }
前端请求需要在main.js中配置
importAxiosfrom'axios'Vue.prototype.$axios=Axios
前端请求方式如下
在调用的时候用以下方式进行请求
this.$axios.get('/api/v1/user/'+this.username+'/'+this.password) .then(data=>{ alert('get//'+data.data.code); }).catch(error=>{ alert(error); }); this.$axios.get('/api/v1/user',{ params:{ username:this.username, password:this.password } }).then(data=>{ alert('get'+data.data.data) }).catch(error=>{ alert(error) }); this.$axios.put('/api/v1/user',{ id:1, username:this.username, password:this.password }).then(data=>{ alert('数据password:'+data.data.data.password) alert('数据username:'+data.data.data.username) }).catch(error=>{ alert(error) }); this.$axios.delete('/api/v1/user/1') .then(data=>{ alert('delete//'+data.data.code); }).catch(error=>{ alert(error); }); this.$axios.post('/api/v1/user',{ username:this.username, password:this.password }).then(data=>{ alert('post'+data.data.data.password) }).catch(error=>{ alert(error); });
补充知识:vue结合axios封装form,restful,get,post四种风格请求
axios特点
1.从浏览器中创建XMLHttpRequests
2.从node.js创建http请求
3.支持PromiseAPI
4.拦截请求和响应(就是有interceptor)
5.转换请求数据和响应数据
6.取消请求
7.自动转换JSON数据
8.客户端支持防御XSRF
安装
npmiaxios–save npmiqs--save npmielement-ui--save npmilodash--save
引入
1.在入口文件中引入所需插件
main.js
importVuefrom'vue' importAppfrom'./App.vue' importrouterfrom'./router' importstorefrom'./store' importElementUIfrom'element-ui'; import'element-ui/lib/theme-chalk/index.css'; importurlfrom'./apiUrl' importapifrom'./apiUtil' Vue.prototype.$axios=api.generateApiMap(url); Vue.config.productionTip=false Vue.use(ElementUI); newVue({ router, store, render:h=>h(App) }).$mount('#app')
2.新建一个util文件夹(只要存放工具类)
在util中建apiUtil.js,apiUrl.js两个文件
apiUtil.js封装请求体
importaxiosfrom'axios' import_from'lodash' importrouterfrom'@/util/baseRouter.js' import{Message}from'element-ui' importqsfrom'qs' constgenerateApiMap=(map)=>{ letfacade={} _.forEach(map,function(value,key){ facade[key]=toMethod(value) }) returnfacade } //整合配置 consttoMethod=(options)=>{ options.method=options.method||'post' return(params,config={})=>{ returnsendApiInstance(options.method,options.url,params,config) } } //创建axios实例 constcreateApiInstance=(config={})=>{ const_config={ withCredentials:false,//跨域是否 baseURL:'', validateStatus:function(status){ if(status!=200){ Message(status+':后台服务异常') } returnstatus; } } config=_.merge(_config,config) returnaxios.create(config) } //入参前后去空格 consttrim=(param)=>{ for(letainparam){ if(typeofparam[a]=="string"){ param[a]=param[a].trim(); }else{ param=trim(param[a]) } } returnparam } //restful路径参数替换 consttoRest=(url,params)=>{ letparamArr=url.match(/(?<=\{).*?(?=\})/gi) paramArr.forEach(el=>{ url=url.replace('{'+el+'}',params[el]) }) returnurl } //封装请求体 constsendApiInstance=(method,url,params,config={})=>{ params=trim(params) if(!url){ return } letinstance=createApiInstance(config) //响应拦截 instance.interceptors.response.use(response=>{ letdata=response.data//服务端返回数据 letcode=data.meta.respcode//返回信息状态码 letmessage=data.meta.respdesc//返回信息描述 if(data===undefined||typeofdata!="object"){ Message('后台对应服务异常'); returnfalse; }elseif(code!=0){ Message(message); returnfalse; }else{ returndata.data; } }, error=>{ returnPromise.reject(error).catch(res=>{ console.log(res) }) } ) //请求方式判断 let_method=''; let_params={} let_url='' if(method==='form'){ _method='post' config.headers={'Content-Type':'application/x-www-form-urlencoded'} _params=qs.stringify(params) _url=url }elseif(method==='resetful'){ _method='get' _params={} _url=toRest(url,params) }elseif(method==='get'){ _method='get' _params={ params:params } _url=url }elseif(method==='post'){ _method='post' _params=params _url=url }else{ Message('请求方式不存在') } returninstance[_method](_url,_params,config) } exportdefault{ generateApiMap:generateApiMap }
apiUrl.js配置所有请求路径参数
其中resetful风格请求的路径中的请求字段必须写在‘{}'中
consthost='/api'//反向代理 exportdefault{ userAdd:{url:host+"/user/add",method:"post"}, userList:{url:host+"/user/userList",method:"get"}, userInfo:{url:host+"/user/userInfo/{id}/{name}",method:"resetful"}, userInsert:{url:host+"/login",method:"form"}, }
使用
四种请求方式的入参统一都以object形式传入
APP.vue
登录
ps:入参也可以再请求interceptors.request中封装
以上这篇vue调用RESTful风格接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。