1.Spring MVC传递List类型参数报错:No primary or default constructor found for interface java.util.List]使用两种注解

1.Spring MVC传递List类型参数报错:No primary or default constructor found for interface java.util.List]使用两种注解解决

1.1 出现场景

/**
     * 对菜品进行停售或者是起售
     * @param status
     * @param ids
     * @return
     */
    @PostMapping("/status/{status}")
    public R<String> status(@PathVariable("status") Integer status, List<Long> ids){
        log.info("status:{}",status);
        log.info("ids:{}",ids);
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(Dish::getId,ids);
        List<Dish> list = dishService.list(queryWrapper);
        list = list.stream().map((item)->{
            item.setStatus(status);
            return item;
        }).collect(Collectors.toList());

        dishService.updateBatchById(list);
        return R.success("调整成功");
    }

瑞吉外卖中对菜品进行停售或者是起售中前端向后端传入多个id数据,后端用List接收出现错误

1.2 解决方法 添加@RequestParam注解接收

1.3 原因

Spring MVC 默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。
由于List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单一数据。
通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。

1.4 RequestParam作用

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

1.5 拓展

试了下PathVariable,

1.5.1 作用

@PathVariable 映射 URL 绑定的占位符 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

@PathVariable(“xxx”) 绑定到操作方法的入参中

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String name){
        return userService.selectUser(name);
    }

1.5.2 用法

1、若方法参数名称和需要绑定的url中变量名称一致时,可以简写

@RequestMapping("/getUser/{name}")
    public User getUser(@PathVariable String name){
        return userService.selectUser(name);
    }

2、若方法参数名称和需要绑定的url中变量名称不一致时,写成

@RequestMapping("/getUserById/{name}")
    public User getUser(@PathVariable("name") String userName){
        return userService.selectUser(userName);
    }

参考博客:
http://t.csdn.cn/sF7xP
http://t.csdn.cn/jtEk7

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值