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

JDBC查询时抛出ItemsNotFoundException的实现方法咨询

解决方案:在查询无结果时抛出自定义异常

先给你明确答案:是的,你需要在jdbcTemplate.query()返回空列表时抛出ItemsNotFoundException——Spring的JdbcTemplate在没有匹配查询结果时,会返回一个空的ArrayList而非null,所以你只需要判断列表是否为空即可,不用额外处理null的情况。

步骤1:定义自定义异常类

首先你需要确保已经创建了ItemsNotFoundException这个业务异常类,通常继承自RuntimeException(这样不需要强制调用方捕获,更符合业务异常的处理习惯):

public class ItemsNotFoundException extends RuntimeException {
    // 带消息的构造方法,方便传递异常信息
    public ItemsNotFoundException(String message) {
        super(message);
    }
}

步骤2:修改仓库方法,添加异常抛出逻辑

在你的getItemsByName方法中,获取查询结果后立即判断列表是否为空,为空则抛出异常:

@Override
public List<Item> getItemsByName(String name) {
    String sql = "SELECT * FROM ITEMS WHERE NAME = :name";
    Map<String, Object> params = new HashMap<>();
    params.put("name", name);
    
    // 执行查询获取结果列表
    List<Item> items = jdbcTemplate.query(sql, params, new ItemMapper());
    
    // 无匹配结果时抛出异常
    if (items.isEmpty()) {
        throw new ItemsNotFoundException(String.format("No items found with name: '%s'", name));
    }
    
    return items;
}

补充说明

  • JdbcTemplate的query方法在无结果时不会返回null,所以你不用写if (items == null || items.isEmpty())这样的判断,只需要检查isEmpty()就足够了。
  • 这个逻辑完全适配你的需求:当用户传入的商品名称不存在时,明确抛出异常告知调用方,而不是默默返回空列表。如果后续业务允许返回空列表,只需要移除这个判断即可。

内容的提问来源于stack exchange,提问作者cerbin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:38