Spring REST URL参数如何区分空列表与null?
实现空列表与null的差异化过滤逻辑
核心实现思路
不需要新增单独参数,直接通过现有列表参数的两种状态(null/空列表)来区分场景,在接口层和数据访问层做条件分支处理即可:
- 当参数为
null时:不添加任何该字段的过滤条件,直接返回数据库全量数据 - 当参数为空列表时:添加
WHERE 目标列 IS NULL的过滤条件,返回对应列值为NULL的行 - 当参数为非空列表时:执行常规的
IN查询,返回列值在列表中的行
代码示例
后端接口层(Java Spring Boot 为例)
@GetMapping("/api/data") public List<DataRecord> fetchData(@RequestParam(required = false) List<String> filterValues) { LambdaQueryWrapper<DataRecord> queryWrapper = new LambdaQueryWrapper<>(); if (filterValues != null) { if (filterValues.isEmpty()) { // 空列表:匹配目标列为NULL的记录 queryWrapper.isNull(DataRecord::getTargetColumn); } else { // 非空列表:IN查询 queryWrapper.in(DataRecord::getTargetColumn, filterValues); } } // 参数为null时,不添加任何过滤条件,直接查询全量 return dataRecordMapper.selectList(queryWrapper); }
SQL 层面(MyBatis 动态SQL 为例)
SELECT * FROM data_record <if test="filterValues != null"> <choose> <when test="filterValues.isEmpty()"> WHERE target_column IS NULL </when> <otherwise> WHERE target_column IN <foreach collection="filterValues" item="val" open="(" separator="," close=")"> #{val} </foreach> </otherwise> </choose> </if>
关键注意事项
- 确保参数解析框架能正确区分
null和空列表:比如Spring MVC中,调用方不传该参数时,参数值为null;调用方传递空列表(如filterValues=或filterValues[]=)时,会被解析为空列表 - 避免在业务逻辑中混淆两种状态的判断,建议明确分支顺序(先判断是否为null,再判断是否为空)
内容的提问来源于stack exchange,提问作者Marko Taht
相关产品推荐
相关产品推荐

