@PathVariable、@PathParam、@RequestBody接收axios传递的请求参数;后端接收前端传递过来的参数

这篇具有很好参考价值的文章主要介绍了@PathVariable、@PathParam、@RequestBody接收axios传递的请求参数;后端接收前端传递过来的参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、前言 :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<Object,Object> map){

        log.info("请求接入R----POST____________________________________________________ ");
        log.info("map:{}",map);
        return "sdjw";
    }

总结

优点:省事

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

 四、后端发送数据给前端

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

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

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.26</version>
</dependency>

后端

    @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 400
Request 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、个人感想

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

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

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




发现错误欢迎在评论区指出文章来源地址https://www.toymoban.com/news/detail-799837.html

到了这里,关于@PathVariable、@PathParam、@RequestBody接收axios传递的请求参数;后端接收前端传递过来的参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • @RequestBody接收不到前端传递过来的json数据

    我刚开始只是写@RequestBody ParkingRecord parkingRecord 一直获取的都是null, 直到用了Map标签才终于获取到参数了 获取到map的key,就可以获取值了 有人说是前后端参数名称不一致:在实体类的属性上加一个注解 然而这个没有解决我的问题 也有人说是因为lombok的问题,自己用idea的快捷

    2024年02月12日
    浏览(53)
  • 在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。

    在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。这个问题的原因是axios默认发送的请求是json格式的,而后端接收的请求是form表单格式的,这就导致后端无法获取json格式的请求参数。解决这个问题可以通过设置axios的请求头部信息,将请求格式设置为

    2024年02月16日
    浏览(50)
  • vue3使用axios发送post请求,后台接收到的参数总是null,使用postman测试后台是能接收数据的

    使用vue3,连基本的请求都失败了,使用浏览器查看post请求,参数中是有值,但是传到后台,每个参数都是null,不知道哪里错了。排除了后台的错误,就剩下了vue代码的错误了。我出错的地方是vue使用axios发送post请求的时候,参数格式写错了。 直接贴代码了,正确的写法 f

    2024年02月13日
    浏览(45)
  • 【Vue框架】Vue2中axios发送请求—安装axios、配置全局域名、传递参数、axios原理之Promise(什么是Promise、使用原因、基本使用、相关API、async与await使用)

    官网: https://www.axios-http.cn/ 1.1.1 安装axios库 安装 axios 通信库: npm install axios -S 1.1.2 在全局中引入axios库 全局在main.js中引入axios: import axios from \\\'axios\\\' 1.1.3 挂在原型对象 Vue.prototype.$axios = axios; 将 axios 挂载到Vue原型对象中,实现数据共享,节约内存空间。 此时在任何页面都可

    2024年02月05日
    浏览(51)
  • 关于postman传递两个参数@RequestBody注解只能有一个!

    1.一个bean一个集合,集合前面必须加注解  postman的传参写法  ========================================================================= 2.一个bean和一个数组,数组前面是不用加注解的也可以接收的上 postman传参    

    2024年02月11日
    浏览(34)
  • @RequestParam @RequestBody @PathVariable用法详解

    三个注解都是在我们进行请求时对服务端参数进行封装的,那么具体三个注解的使用,什么情况下,什么条件下使用呢? @RequestParam接收的参数是来自于RequestHeader中,即请求头。 @RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。

    2024年02月13日
    浏览(45)
  • 深入剖析@RequestBody、@PathVariable和@RequestParam注解

    当我们在开发服务端方法时,遇到给方法传参的有几个不同的注解,今天我们来介绍 @RequestBody 、 @PathVariable 和 @RequestParam 这几个注解的定义和使用场景示例,以便于同学们理解和掌握。 @RequestBody 注解: 定义: @RequestBody 注解用于从请求体中获取数据,并将其转换为指定的对

    2024年02月09日
    浏览(36)
  • @ResponseBody 和 @RequestBody以及@PathVariable的作用

    @ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response bo

    2024年02月08日
    浏览(35)
  • vue+axios 向后端SpringBoot传递List 后端使用List接收

    困扰了一天的问题第二天终于解决了! 一开始是这样向后端传的:(主要看后面的seats) 结果报错了: 在网上找了好多解决方法,有说参数太长,超过了Tomcat的限制了怎么的,反正是没有解决。 直接上解决方法吧。 前端代码:  后端代码: 最后附上我自己的: 前端代码:

    2024年02月03日
    浏览(48)
  • axios传递参数的使用

    今天在学习elasticsearch时,遇到一个问题:项目中前端采用的是Vue2+axios,后端的接口采用Restful风格来接收: 关于Resultful风格: 1. GET(SELECT):从服务器取出资源(一项或多项); 2. POST(CREATE):在服务器新建一个资源; 3. PUT(UPDATE):在服务器更新资源(客户端提供改变

    2023年04月24日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包