记录没见过的Bug之BindingException
今天在写一个删除套餐功能时遇到个bug如下图所示:
我们都知道当一个请求参数有多个值接收时可以采用如下方式:
1. 使用数组接收 Long[] ids
2. 使用集合接收 List<Long> ids 注意: 如果使用集合需要添加@RequestParam
这里我采用的是以集合方式来接收。
在Mapper接口中的方法如下
//动态sql
long findCountByIds(List<Long> ids);
//根据ids批量删除的套餐
void deleteByIds(List<Long> ids);
xml的sql语句如下:
<!-- 为了提高sql语句的复用性,可以使用sql标签抽取出来-->
<sql id="foreachSql">
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</sql>
<!-- //查询在售套餐的个数
long findCountByIds(List<Long> ids);-->
<select id="findCountByIds" resultType="long">
SELECT COUNT(*) FROM setmeal WHERE STATUS=1 AND id IN
<include refid="foreachSql"></include>
</select>
<!--//根据ids批量删除的套餐
void deleteByIds(List<Long> ids);-->
<delete id="deleteByIds">
delete from setmeal where id in
<include refid="foreachSql"></include>
</delete>
一切都看着那么的岁月静好,但最后运行却报错了。。。
分析原因:
原来在mybatis 中,当 Mapper传入的是 List 参数时,会自动将参数封装成 Map 参数,而 map中的 key 会自动用 list , value 就是你传入的 List 参数。
解决方法:
第一种: 将 List 参数封装为 Map 然后再传入,在 XML 配置页面写上相应 key 值.
第二种: 将 collection 的值修改为 list
文章来源:https://www.toymoban.com/news/detail-416288.html
这样报错就解决啦文章来源地址https://www.toymoban.com/news/detail-416288.html
到了这里,关于BindingException: Parameter ‘ids‘ not found. Available parameters are [collection, list]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!