首先是简单的java接口代码
写了四个让前端请求的接口,以下为代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@GetMapping( "/v1/user/{username}/{password}" )
public Result login2(@PathVariable( "username" ) String username, @PathVariable( "password" ) String password){
return Result.succResult(200,username+ "--" +password);
}
@PostMapping( "/v1/user" )
public Result login3(@RequestBody User user){
return Result.succResult(200, "ok" ,user);
}
@PutMapping( "/v1/user" )
public Result putUser(@RequestBody User user){
return Result.succResult(200,user);
}
@DeleteMapping( "/v1/user/{id}" )
public Result delete (@PathVariable Integer id){
return Result.succResult(200,id);
}
|
前端请求需要在main.js中配置
import Axios from 'axios' Vue.prototype.$axios = Axios
前端请求方式如下
在调用的时候用以下方式进行请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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.支持 Promise API
4.拦截请求和响应 (就是有interceptor)
5.转换请求数据和响应数据
6.取消请求
7.自动转换 JSON 数据
8.客户端支持防御 XSRF
安装
1
2
3
4
|
npm i axios–save
npm i qs --save
npm i element-ui --save
npm i lodash --save
|
引入
1.在入口文件中引入所需插件
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui' ;
import 'element-ui/lib/theme-chalk/index.css' ;
import url from './apiUrl'
import api from './apiUtil'
Vue.prototype.$axios = api.generateApiMap(url);
Vue.config.productionTip = false
Vue.use(ElementUI);
new Vue({
router,
store,
render: h => h(App)
}).$mount( '#app' )
|
2.新建一个util文件夹(只要存放工具类)
在util中建apiUtil.js , apiUrl.js两个文件
apiUtil.js 封装请求体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
import axios from 'axios'
import _ from 'lodash'
import router from '@/util/baseRouter.js'
import { Message } from 'element-ui'
import qs from 'qs'
const generateApiMap = (map) => {
let facade = {}
_.forEach(map, function (value, key) {
facade[key] = toMethod(value)
})
return facade
}
//整合配置
const toMethod = (options) => {
options.method = options.method || 'post'
return (params, config = {}) => {
return sendApiInstance(options.method, options.url, params, config)
}
}
// 创建axios实例
const createApiInstance = (config = {}) => {
const _config = {
withCredentials: false , // 跨域是否
baseURL: '' ,
validateStatus: function (status) {
if (status != 200){
Message(status+ ':后台服务异常' )
}
return status;
}
}
config = _.merge(_config, config)
return axios.create(config)
}
//入参前后去空格
const trim = (param) =>{
for (let a in param){
if ( typeof param[a] == "string" ){
param[a] = param[a].trim();
} else {
param = trim(param[a])
}
}
return param
}
//restful路径参数替换
const toRest = (url,params) => {
let paramArr = url.match(/(?<=\{).*?(?=\})/gi)
paramArr.forEach(el=>{
url = url.replace( '{' +el+ '}' ,params[el])
})
return url
}
//封装请求体
const sendApiInstance = (method, url, params, config = {}) => {
params = trim(params)
if (!url){
return
}
let instance = createApiInstance(config)
//响应拦截
instance.interceptors.response.use(response => {
let data = response.data //服务端返回数据
let code = data.meta.respcode //返回信息状态码
let message = data.meta.respdesc //返回信息描述
if (data === undefined || typeof data != "object" ){
Message( '后台对应服务异常' );
return false ;
} else if (code != 0){
Message(message);
return false ;
} else {
return data.data;
}
},
error => {
return Promise.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
} else if (method === 'resetful' ){
_method = 'get'
_params = {}
_url = toRest(url,params)
} else if (method === 'get' ){
_method = 'get'
_params = {
params: params
}
_url = url
} else if (method === 'post' ){
_method = 'post'
_params = params
_url = url
} else {
Message( '请求方式不存在' )
}
return instance[_method](_url, _params, config)
}
export default {
generateApiMap : generateApiMap
}
|
apiUrl.js 配置所有请求路径参数
其中resetful风格请求的路径中的请求字段必须写在 ‘{}'中
1
2
3
4
5
6
7
|
const host= '/api' //反向代理
export default {
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<template>
<div class= "login" >
<el-button type= "primary" @click= "submitForm" class= "submit_btn" >登录</el-button>
</div>
</template>
<script>
export default {
data() {
return {
};
},
methods:{
submitForm(){
this .$axios.userAdd({
id: '123' ,
name: 'liyang'
}).then(data=>{
console.log(data)
})
}
}
};
</script>
|
ps:入参也可以再请求interceptors.request中封装
以上这篇vue 调用 RESTful风格接口操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_35160593/article/details/89180953