You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:05