【无标题】

博客指出后端接口运行报错,原因是参数字段不匹配,如后端接口接受参数为数组,而前端传参是json数据。给出错误示范,展示传json报错、传list成功的情况,还提到将List<String> listCode封装起来,但未说明后续情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.错误示范

@ApiOperation("发送设备安全通知")
    @PostMapping("/sendSafeMessage1")
    public void test1010(@RequestBody List<String> listCode) {
        //        获取电话列表
        List<String> phoneNumber = new ArrayList<>();
        listCode.forEach(item -> {
            List<SupEnterprise> supEnterpriseList = supEnterpriseMapper.selectList(
                    new MyLambdaQueryWrapper<SupEnterprise>()
                            .eq(SupEnterprise::getCreditCode, item)
            );
            if (ObjectUtils.isNotNull(supEnterpriseList)) {
                phoneNumber.add(supEnterpriseList.get(0).getContactPhone());
            }
        });
        System.out.println(phoneNumber);
    }

问题1:

运行报错

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
at [Source: (PushbackInputStream); line: 1, column: 1]

原因:参数字段不匹配,比如我这里写的后端接口接受的参数是数组(@RequestBody List< String> customers),但是传参又是一个json数据,没对应好(如下图
(前端传入的为json对象,但是这里设置入参为List<String>

(1)传json报错

(2)传list,成功

 

2.改为

@ApiOperation("发送设备安全通知")
    @PostMapping("/sendSafeMessage")
    public R<Object> sendSafeMessage(@RequestBody ListCode param) throws IOException {
        List<String> listCode = param.getListCode();

//        获取电话列表

        List<String> phoneNumber = new ArrayList<>();
        listCode.forEach(item -> {
            List<SupEnterprise> supEnterpriseList = supEnterpriseMapper.selectList(
                    new MyLambdaQueryWrapper<SupEnterprise>()
                            .eq(SupEnterprise::getCreditCode, item)
            );
            if (ObjectUtils.isNotNull(supEnterpriseList)) {
                phoneNumber.add(supEnterpriseList.get(0).getContactPhone());
                System.out.println("手机号内"+supEnterpriseList.get(0).getContactPhone());
            }
        });
@Data
public class ListCode {

    @ApiModelProperty("信用代码列表")
    private List<String> listCode;

}

将List<String> listCode封装起来。

问题2:

为什么

public R<Object> sendSafeMessage(@RequestBody ListCode param) throws IOException {
        List<String> listCode = param.getListCode();
        ...
}

public R<Object> sendSafeMessage(@RequestBody ListCode listCode) throws IOException {
        ...
}

为什么以上代码不能改成以下代码,直接用listCode;
因为listCode为封装的ListCode中的一个属性,listCode.getListCode();这样获取会报错。
需要用param来先把listCode取出来,然后传给listCode

@Data
public class ListCode {

    @ApiModelProperty("信用代码列表")
    private List<String> listCode;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值