Postman 接口传参报错解决与@RequestBody的注解作用记录

文章介绍了在处理POST请求时,使用@RequestBody注解接收List<String>参数遇到的JSON解析错误问题。错误原因是前端发送的数据格式不正确。解决方案是调整请求体格式,使其符合后端定义的实体类结构。同时,解释了@RequestBody注解的作用,即接收并映射JSON字符串到Java对象。
摘要由CSDN通过智能技术生成

前言

记录接口传参报错与解决和@RequestBody的作用记录

一、接口代码

1.1 代码说明

以下面测试代码作为例子:前端发送 POST 请求,请求体里面携带 List 集合的字符串发送给后端接口,后端接口接收到前端发送的请求数据后直接返回给前端。

@PostMapping("/test")
public R test(@RequestBody List<String> list) {
    return R.ok().put("data", list);
}

1.2 测试结果

在这里插入图片描述

报错信息:

"JSON parse error: Cannot deserialize instance of java.util.ArrayList<java.lang.Object> 
out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.
MismatchedInputException: Cannot deserialize instance of 
`java.util.ArrayList<java.lang.Object>` out of START_OBJECT token\n at 
[Source: (PushbackInputStream); line: 1, column: 1]",

1.3 问题解决

{
    "list": [
        "哈哈哈!",
        "呵呵呵!"
    ]
}

上面这种写法是 @RequestBody 注解封装 List 对象进行传递的,例如下面代码

@PostMapping("/test")
public R test(@RequestBody StringVo strVo) {
    return R.ok().put("strVo", strVo);
}
@Data
public class StringVo {
    public List<String> hobby;
    public String name;
    public Integer age;
}

重启项目,发送请求
在这里插入图片描述
请求体中的属性必须与StringVo类中的属性对应,若属性对应不一致则对应数据为 null,如下图:
在这里插入图片描述

@PostMapping("/test")
public R test(@RequestBody List<String> list) {
    return R.ok().put("data", list);
}

当接口参数 @RequestBody List< String > list 时,传递的请求体如下即可:

[
  "哈哈哈!",
  "呵呵呵!"
]

1.4 @RequestBody 作用

@RequestBody 注解用来接收前端传递给后端的 JSON 字符串中的请求体中的数据,我们常用 POST 请求发送,所以使用 @RequestBody 接收数据时,一般都用 POST 方式进行提交,在后端的接收方法里使用@RequestBody 来修饰请求参数。

@RequestBody 注解对应的类在将 HTTP 的输入流(含请求体)装配到目标类时,会根据 JSON 字符串中的 key 来匹配对应实体类的属性,如果匹配一致且 JSON 中的该 key 对应的值符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的 setter 方法将值赋给该属。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值