若依前后端分离版本-前后端交互整理

ruoyi-ui与后端交互

方法一:表单

使用 headers: {'Content-Type':'application/x-www-form-urlencoded'},

ruoyi-ui的vue中

javascript 复制代码
//ruoyi-ui的vue中定义
formData: {
                    a: '111',
                    b: '111',
                    c: 1,
                },
//vue中方法调用              
outBound() {            
            empty(this.formData).then(response => {
        })
},

ruoyi-ui的api中

javascript 复制代码
​​​​​​​//ruoyi-ui中js中api
export function empty(data) {
   const encodedData = qs.stringify(data);
  return request({
    url: '/A/info/empty',
    method: 'post',
    data: encodedData,
    headers: {'Content-Type':'application/x-www-form-urlencoded'},
  })
}

controller方法

java 复制代码
//controller中方法
@RequestMapping("/A/info")
~~~
    @PreAuthorize("@ss.hasPermi('A:info:remove')")
  
    @PostMapping("/empty")
    public AjaxResult empty( String a, String b, Integer c) {
        return aInfoService.empty(a, b, c);
    }

方法二:json

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

ruoyi-ui的vue中

javascript 复制代码
//ruoyi-ui的vue中定义
formData: {
					a: '111',
					b: '111',
					c: 1,
				},
//vue中方法调用				
outBound() {   			
     		empty(this.formData.a,this.formData.b,this.formData.c).then(response => {
     	})
},

ruoyi-ui的api中

javascript 复制代码
//ruoyi-ui中js中api
export function empty(a,b,c) {
  return request({
    url: '/A/info/empty/'+a+'/'+b+'/'+c,
    method: 'post',
  })
}

controller方法

java 复制代码
   //controller中方法
@RequestMapping("/A/info")
  
    @PostMapping("/empty/{a}/{b}/{c}")
    public AjaxResult empty( @PathVariable String a, @PathVariable String b, @PathVariable Integer c) {
        return aInfoService.empty(a, b, c);
    }

ruoyi-app与后端交互

方法一:表单

ruoyi-app的vue中

javascript 复制代码
//ruoyi-app的vue中定义
formData: {
					a: '111',
					b: '111',
					c: 1,
				},
//vue中方法调用				
outBound() {   			
     		empty(this.formData).then(response => {
     	})
},

ruoyi-app的api中

javascript 复制代码
//ruoyi-app的js中api
export function empty(data) {
        return request({
                url: '/A/info/empty',
                method: 'post',
                data: data,
                header : {"Content-Type":"application/x-www-form-urlencoded"}
  })
}

controller中

java 复制代码
//controller中方法
@RequestMapping("/A/info")
~~~
    @PreAuthorize("@ss.hasPermi('A:info:remove')")
  
    @PostMapping("/empty")
    public AjaxResult empty( String a, String b, Integer c) {
        return aInfoService.empty(a, b, c);
    }

方法二:json-同ui前后端交互

如果想要ruoyi-ui的前后端表单交互与ruoyi-app使用前后端表单交互相同,需要对request.js进行修改

修改ruoyi-ui的request.js

方法一:axios请求配置中提供了transformRequest方法用于发送前修改请求数据

请求配置 | Axios中文文档 | Axios中文网 (axios-http.cn)

复制代码
创建axios实例后,添加
javascript 复制代码
// 新增
// `transformRequest` 允许在向服务器发送前,修改请求数据
// 它只能用于 'PUT', 'POST' 和 'PATCH' 这几个请求方法
// 数组中最后一个函数必须返回一个字符串, 一个Buffer实例,ArrayBuffer,FormData,或 Stream
service.defaults.transformRequest = [function (data, headers){
  if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {
    return typeof data === 'object' ? qs.stringify(data) : data;
  }
    if (headers['Content-Type'].includes("application/json")) {
    return typeof data === 'object' ? JSON.stringify(data) : data;
  }
  return data
}]

方法二:request拦截器中添加,用于修改config.data值

javascript 复制代码
import qs from 'qs'
// 【如果是表单类型,判断一下数据是不是对象,如果是对象,则序列化,如果不是对象则直接返回,如果不是表单则直接返回】
//qs.stringify会将对象序列化为 key1=value1&key2=value2&key3=value3形式
config.data = config.headers['Content-Type'] === "application/x-www-form-urlencoded" ?
  (typeof config.data === 'object' ? qs.stringify(config.data) : config.data) : config.data;

小白一枚,可能有不对的地方~

相关推荐
爱喝白开水a1 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway1 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康1 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼1 小时前
JavaWeb_p165部门管理
java·开发语言·前端
EndingCoder1 小时前
WebSocket实时通信:Socket.io
服务器·javascript·网络·websocket·网络协议·node.js
我胡为喜呀1 小时前
Vue3 中的 watch 和 watchEffect:如何优雅地监听数据变化
前端·javascript·vue.js
一成码农1 小时前
JavaSE面向对象(下)
java·开发语言
偶尔的鼠标人2 小时前
Avalonia DataGrid 控件的LostFocus事件会多次触发
开发语言·c#
晚风残2 小时前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer
_extraordinary_2 小时前
Java Spring日志
java·开发语言·spring