前端Axios各种请求参数携带方式以及后端SpringBoot方式如何接收!!!

目录

一.简单参数

1. 参数名与形参变量名相同,定义形参可接收参数

2.如果参数名与形参名字不同就会接收不到但是后端是不会报错的,只会赋值为null

二.实体参数

三.数组集合参数

1.数组接收:只需要后端形参的数组名与前端请求参数名字一致就可以了

2.集合接收:请求参数名与形参集合名称相同,且需要@RequestParam 绑定参数关系

四.日期参数 

五.Json参数

六.路径参数


一.简单参数

   1. 参数名与形参变量名相同,定义形参可接收参数

 axios({
       url:'http://localhost:8080/user/getPeople?username=hz&password=123456 ',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

 @GetMapping("/getPeople")
     public Result selectByUserNameAndPassword(String username,String password){
        System.out.println("username:"+username +" password:"+password);
        return Result.success("ok");
     }

以下都是方便展示,就直接赋值了,一般都是动态传参。(如果想了解Axios的可以看看这个博主写的Axios各种参选携带方式🔎

不管是GET请求还是POST 请求 只要请求参数名与后端形参名一致就可以自动接收。

可以看看打印效果:

浏览器返回结果:

2.如果参数名与形参名字不同就会接收不到但是后端是不会报错的,只会赋值为null

这个时候如果需要 使用Sprngboot 提供的注解 @RequestParam 来完成映射

  axios({
       url:'http://localhost:8080/user/getPeople?name=hz&password=123456 ',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

 @GetMapping("/getPeople")
     public Result selectByUserNameAndPassword(@RequestParam(required = false, name = "name") String username,String password){
        System.out.println("username:"+username +" password:"+password);
        return Result.success("ok");
     }

运行效果:

注意: @RequestParam  里面有2个属性。requiredname

required 属性是默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数要设置为可选的,可以把手动把required属性设置为false。

name 属性是指定请求参数名,如何把请求参数映射到形参对应的形参中

二.实体参数

请求参数名与形参对应属性名相同,定义POJO接收即可

 说简单就是前端请求参数如果太多,还是用简单参数传递,后端形参太多,臃肿且不易维护,后端直接把请求参数封装到一个实体类中(也必须保证请求参数名与实体类的属性名保持一致才可以)

axios({
       url:'http://localhost:8080/user/getPOJO?username=hz&password=123456 ',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {
    private String username;
    private String password;
}

 @GetMapping("/getPOJO")
    public Result selectByUserNameAndPassword(UserDTO userDTO){
        System.out.println("username:"+userDTO.getUsername() +" password:"+userDTO.getPassword());
        return Result.success("ok");
    }

运行效果:

对于复杂实体类 比如实体类中又嵌套了一个实体类携带参数赋值

 axios({
       url:'http://localhost:8080/user/getPOJO?username=hz&password=123456&addressDTO.where=CN&addressDTO.city=CD',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })


public class UserDTO {
    private String username;
    private String password;
    private AddressDTO addressDTO;
}
public class AddressDTO {
    private String where;
    private String city;
}

 @GetMapping("/getPOJO")
    public Result selectByUserNameAndPassword(UserDTO userDTO){
        System.out.println(userDTO);
        return Result.success("ok");
    }

可以看看打印结果:

三.数组集合参数

 前端应用场景如果是复选框会设计到多个值,这个时候可以通过数组的封装来传递 后端可通过数组集和来接收 

1.数组接收:只需要后端形参的数组名与前端请求参数名字一致就可以了

 axios({
       url:'http://localhost:8080/user/array?array=hz&array=mz&array=mn',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

 @GetMapping("/array")
    public Result selectArray(String[] array) {
        System.out.println(Arrays.toString(array));
        return Result.success("ok");
    }

打印结果:

 

2.集合接收:请求参数名与形参集合名称相同,且需要@RequestParam 绑定参数关系

  axios({
       url:'http://localhost:8080/user/array?array=唱&array=跳&array=rap&array=篮球',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

 @GetMapping("/array")
    public Result selectArray( @RequestParam List<String> array ) {
        System.out.println(array);
        return Result.success("ok");
    }

打印结果:

四.日期参数 

    使用@DateTimeFormat 注解完成日期参数格式转换 指定前端传来的格式 后端接收

 axios({
       url:'http://localhost:8080/user/dataTimeParam?localDateTime=2024-05-02 12:52:00',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

 @GetMapping("/dataTimeParam")
    public Result selectArray( @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime) {
        System.out.println(localDateTime);
        return Result.success("ok");
    }

看看打印结果:

其他的根据自己需求更改只需要前后端格式相同即可!!!

注意: 月,日,时分秒,都要两位数,如果是一个就前面补个0(蛋)不然不符合格式!!!

五.Json参数

Json 在前后端异步交互使用的比较频繁  使用规则:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody 注解标识

 axios({
       url:'http://localhost:8080/user/jsonParam',
        data: {
         username:'hz',
         password:'123456',
         addressDTO: {
          where:'CN',
          city:'CD'
         }
       },
       method:'POST'
    }).then((res)=>{
      alert(res.data.data)
    }) 
   
public class UserDTO {
    private String username;
    private String password;
    private AddressDTO addressDTO;
}

public class AddressDTO {
    private String where;
    private String city;
}

  @PostMapping("/jsonParam")
    public Result selectArray(@RequestBody UserDTO userDTO) {
        System.out.println(userDTO);
        return Result.success("ok");
    }

 打印结果:

注意:GET请求无请求体,可以有body,但是不建议带 这里如果使用GET 请求直接携带JSON 格式传递给后端会报400的 ,所以这里演示用POST 请求

当然我这里只是随便简单列举了一下,其他我就不列举了!!!更加详细的可以去了解一下!!JSON格式数据通常需要根据我们前后端数据格式规定了,一般后端实体类中可能还包含了一个集合 ,集合的泛型又可能是一个实体类。也可能包含数组。这些都是比较灵活的,我们只需要按照给的规格是什么类型的数据 前端就给什么类型数据通过动态赋值然后通过JSON传递给后端就可以了!!!练多了也就不复杂了!!!

六.路径参数

 通过请求URL 直接传递参数,后端使用{...}来标识路径参数,需要使用注解@PathVariable获取路径参数

 axios({
       url:'http://localhost:8080/user/path/1',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

@GetMapping("/path/{id}")
    public Result pathParam(@PathVariable Integer id){
        System.out.println(id);
        return Result.success("ok");
    }

打印结果:

如果有多个路径参数只需要后面斜杠加内容添加就可以

  axios({
       url:'http://localhost:8080/user/path/1/hz',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    })

@GetMapping("/path/{id}/{name}")
    public Result pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id+":"+name);
        return Result.success("ok");
    }

打印结果:

当然根据需求我们也可路径参数简单参数一起使用

 axios({
       url:'http://localhost:8080/user/path/1?name=hz',
       method:'GET'
    }).then((res)=>{
      alert(res.data.data)
    }) 

 @GetMapping("/path/{id}")
    public Result pathParam(@PathVariable Integer id,String name){
        System.out.println(id+":"+name);
        return Result.success("ok");
    }

打印结果:

注意:形参id 需要于路径id 保持一致且加注解@PathVariable 

@PathVariable 获取到路径参数id 本且绑定到形参 id 这样 形参id 就可以接收到路径参数了!

  • 63
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: axiosspringboot都是常用的web开发工具,axios前端常用的ajax库,而springboot则是后端常用的Java框架。在利用axiosspringboot服务器发送数据时,如果服务器接收到的数据为空,通常有以下几种原因: 1. 前端数据未正确传递。如前端请求的数据中未携带正确的参数或者参数格式不正确,导致服务器无法获取数据。 2. 后端代码存在问题。可能是在后端处理数据的代码出现了逻辑错误,未能正确解析获取到的数据。 3. 通信协议问题。axios默认使用的是json数据格式与服务器通信,而如果服务器接收到的是其他类型的数据,则可能出现数据无法解析的问题。 针对此问题,可以采取以下解决措施: 1. 在前端检查请求数据是否正确,确认参数是否正确携带并且格式是否正确。 2. 在后端代码中检查数据处理逻辑是否正确,确认是否能够正确解析数据。 3. 确认前后端通信的数据格式一致,可以通过设置axios请求头来指定数据传输的格式。 总之,要想确保axiosspringboot之间数据正常传输,需要开发者对前后端代码都进行检查与调试,找出问题所在并加以解决。 ### 回答2: 问题描述: 在进行axios请求时,通过post方式将表单数据提交到springboot服务器,但服务器接收到的数据为空。 解决方案: 1. 确认前端发送的数据格式是否正确,包括数据字段名、数据类型、数据格式等。注意表单数据需要使用FormData格式发送。 2. 确认后端接收数据的方式是否正确,对于表单数据,可使用@RequestBody注解进行接收。 3. 确认后端代码中是否存在可能引起数据为空的代码逻辑,如使用@RequestParam注解而非@RequestBody进行接收等。 4. 对于数据量较大的情况,可考虑将数据进行分页处理,避免一次性传输过大的数据量。 5. 使用日志记录方式,输出接收到的数据,便于排查问题。 结论: 实现axios请求并不是很难,但在实践中也需要注意一些问题。对于接收数据为空问题,需要从多个方面进行排查,包括前端发送数据格式、后端接收方式以及后端代码实现逻辑等。在排查问题时,需要综合考虑,寻找最终解决方案。 ### 回答3: 在使用 AxiosSpring Boot 服务器进行数据传递时,有时会发现服务器接收到的数据为空。造成这种情况的原因有很多,可以从以下几个方面排查: 1. Axios 请求体设置问题 Axios 默认情况下是将请求数据以 JSON 格式发送到服务器的。如果服务器接收数据的方式不是 JSON 格式,那么就会出现接收数据为空的情况。此时,需要在 Axios请求头中设置 `Content-Type`,并将数据以 form-data 的方式发送到服务器,例如: ``` axios({ method: 'post', url: '/api/user/add', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, data: qs.stringify(formData) }) ``` 2. 请求地址错误 如果请求地址错误,那么服务器无法接收到数据,也就是说即使 Axios 发送了数据,服务器也无法正确处理。因此,需要确认请求地址是否正确。 3. Controller 参数设置问题 在 Spring Boot 的 Controller 中接收数据也有很多种方式,常见的有通过 `@RequestParam`、`@PathVariable`、`@RequestBody` 等注解接收参数。如果参数设置不正确,就可能出现无法接收数据的情况。因此,需要确认参数的设置是否正确。 4. 数据类型不匹配 在前端通过表单提交数据时,数据类型通常为字符串,而在后端接收数据时,需要进行相应的类型转换。如果类型不匹配,就可能出现接收数据为空的情况。例如,前端提交的数据是字符串类型的,而后端要求接收的是整型或者枚举类型,此时就需要进行类型转换。 综上所述,当出现 Axios 发送数据后 Spring Boot 服务器接收数据为空的情况时,需要从以上几个方面进行排查,找出问题所在,逐一解决。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何政@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值