记录一下,前端传参中,传给我参数是“categoryIds: ,1731557494586241026,1731569816263311362,1731569855534579713,1731858335179223042,1731858366821052418”
但是后端,因为我的mybati是in查询,所以因为第一个是“,”。所以会导致系统报错。
下面提供三个解决方法:
方法一:
找前端,让前端改!!
方法二(修改mybatis):
<if test="pd.categoryIds != null and pd.categoryIds.trim() != ''"> <choose> <when test="pd.categoryIds.startsWith(',')"> <bind name="categoryIds" value="pd.categoryIds.substring(1)" /> </when> <otherwise> <bind name="categoryIds" value="pd.categoryIds" /> </otherwise> </choose> AND a.category_id IN (${categoryIds}) </if>
在这个改进后的条件语句中,我们首先使用 trim()
方法去除 categoryIds
字符串两端的空格。然后使用 startsWith(',')
方法判断是否以逗号开头,如果是则使用 substring(1)
方法去除开头的逗号。最后,我们将处理后的 categoryIds
值赋给一个新的变量 categoryIds
,并在条件语句中使用它来构建查询条件。
方法三:
if (categoryIds.startsWith(",")) { categoryIds = categoryIds.substring(1); } String[] categoryIdArr = categoryIds.split(","); List<Long> categoryIdList = new ArrayList<>(); for (String categoryId : categoryIdArr) { categoryIdList.add(Long.parseLong(categoryId.trim())); }
- 如果
categoryIds
字符串以逗号开头,那么使用substring(1)
方法去掉开头的逗号。这是因为在查询条件中,逗号前面不应该有任何字符。 - 使用
split(",")
方法将categoryIds
字符串按逗号分隔成多个字符串,然后赋值给一个名为categoryIdArr
的字符串数组。这个数组包含了多个类别 ID 字符串。 - 创建一个名为
categoryIdList
的空列表,用于存储将要查询的类别 ID。 - 遍历
categoryIdArr
数组中的每个字符串,在遍历过程中,使用Long.parseLong()
方法将字符串解析成Long
类型,并且使用trim()
方法去除字符串两端的空格。然后,将解析后的Long
类型值添加到categoryIdList
列表中。 - 最后,当循环遍历完成后,
categoryIdList
列表中包含了多个类别 ID 的Long
类型值,这个列表就可以用于查询数据了。