目录

一、前言 :Content-Type 类型

(1)、application/x-www-form-urlencoded 类型

(2)、application/json 类型

二、@PathVariable

二、@PathParam

三、@RequestBody

四、后端发送数据给前端

五、注意事项


一、前言 :Content-Type 类型

(1)、application/x-www-form-urlencoded 类型

请求参数以key-value的形式传输

(2)、application/json 类型

请求参数以JOSN串的形式传输

axios的Content-Type 类型 默认是application/json 类型

!!!前后端数据传输Content-Type 类型必须一致

二、@PathVariable

@PathVariable接收数据和Content-Type 类型无关。

@PathVariable接收的是请求路径中的参数

前端axios代码(get):

function Vget(){ let str="发送数据V--get";axios({url:`http://localhost:8081/v/${str}`,method:'get',});}

后端代码(get):

(log.info是日志打印,就是sout)

@RequestMapping(value = "/v/{str}",method = RequestMethod.GET)public String GetVtest(@PathVariable("str") String str){log.info("请求接入v----GET____________________________________________________ ");log.info("str:{}",str);return "V-GET";}

post请求

前端(post):

 function VPost(){let str="发送数据V--post";axios({url:`http://localhost:8081/v/${str}`,method:'post',});}

后端(post)

@RequestMapping(value = "/v/{str}",method = RequestMethod.POST)public String PostVtest(@PathVariable("str") String str){log.info("请求接入v----POST____________________________________________________ ");log.info("str:{}",str);return "V-POST";}

总结:

优点:无论是get还是post请求都是传递参数

缺点:不能传递带 “/” 的数据、不能传递对象、只能传递简单的数据

用途:可以在“修改”操作的时候传递user的id

二、@PathParam

@PathParam接收数据的Content-Type 类型需要是application/x-www-form-urlencoded 类型

而axios中默认是application/json 类型。

需要引入qs (当然更改Content-Type也行,推荐直接使用qs)

引入qs (axios自带,不用而外下载)

import qs from 'qs'

前端(get)

 function Pget(){let str="发送数据P--get";let str2="get";axios({url:`http://localhost:8081/p`,method:'get',data:qs.stringify({str:str,str2:str2}) //get请求无法传输参数});}

后端(get)

@RequestMapping(value = "/p",method = RequestMethod.GET)public String GetPtest(@PathParam("str") String str,@PathParam("str2") String str2){log.info("请求接入P----GET____________________________________________________ ");log.info("str:{}",str);return "P-GET";}

注意:axios的get请求是不能传递请求体中的参数的,所以后端接收时候str和str2都是 “null”

POST方式

才能传递请求体中的参数

前端(POST)

function Ppost(){let str="发送/数/据P--post";let str2="pos/t";axios({url:`http://localhost:8081/p`,method:'post',data:qs.stringify({str:str,str2:str2})});}

后端(post)

@RequestMapping(value = "/p",method = RequestMethod.POST)public String PostPtest(@PathParam("str") String str,@PathParam("str2") String str2){log.info("请求接入P----POST ____________________________________________________");log.info("str:{}",str);return "P-POST";}

总结

优点:可以传递对象类型,参数内容带 “/” 也能传输

缺点:需要前后端协调清楚(稍微key不一样就不能接收到value)

在与后端交互过程qs会把Content-Type 改变成application/x-www-form-urlencoded类型

虽然浏览器请求头中依旧是application/json 类型,实际是改变了

三、@RequestBody

@RequestBody接收数据的Content-Type 类型需要是application/json 类型

且请求方式需要是POST类型

前端(POST)

function Rpost(){let str="P";let str2="post色地方";//let str={sd:'sdw'};axios({url:'http://localhost:8081/r',method:'post',data:{str:str,str2:str2}});}

后端(POST)

@RequestMapping(value = "/r",method = RequestMethod.POST)public String PostRtest(@RequestBody Map map){log.info("请求接入R----POST____________________________________________________ ");log.info("map:{}",map);return "sdjw";}

总结

优点:省事

缺点:后端类型不匹配错误 会报400、415 错误

四、后端发送数据给前端

介绍了后端接收前端数据,那也简单说一下后端发送数据给前端吧(其实我其他博客有说过)

发送的数据需要是json,所以要引入依赖

com.alibaba.fastjson2fastjson22.0.26

后端

@ResponseBody@RequestMapping(value = "/user",method = RequestMethod.GET)public String User(){Temp temp=new Temp(); //自定义的Temp类temp.setStr("数据1");temp.setStr2("数据2");//JSON.toJSONString 把对象转化成JSON串return JSON.toJSONString(temp);}

前端

 function getUser(){axios({url:'http://localhost:8081/user'}).then((data)=>{console.log("接收到参数")console.log(data.data);}).catch((e)=>{console.log("出现错误");console.log(e.msg);})}

五、注意事项

2、后端使用@RequestBody时候出现

前端axios出现

Request failed with status code 400Request failed with status code 415

报错的时候检查

(1)axios请求体中data有没有写错(是不是写成了date)

(2)后端接收类型是否匹配(推荐直接使用map或者String)

(3)检查请求方式是不是POST

(4) vue有没有配置跨域(解决跨域可以看看其他博主的)

2、后端使用@PathParam 接收时候出现 null

(1)检查data是不是写错了(是不是写成了date)

(2)检查axios发送请求方式是不是POST

(3)检查前后端的参数key是不是相同

(4)检查data有没有使用qs

3、个人感想

每次写项目中前后端的交互总会出现一点小问题,每次都要暂停思路来检查这种小问题,

这是很让人浮躁的,今天花了一下午试错和查找解决办法,我上面提到的是最简单的解决办法了。

总之一句话:学习过程不要好高骛远因小失大




发现错误欢迎在评论区指出

Copyright © maxssl.com 版权所有 浙ICP备2022011180号