我有以下存储库方法:
@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);
return jdbcTemplate.query(sql, params, new ItemMapper());
}
现在我想在用户传递不存在的项名时抛出ItemsNotFoundException。我该怎么办?当query()方法返回空列表或为null时,我应该抛出异常:
List<Item> items = jdbcTemplate.query(sql, params, new ItemMapper());
if (items == null || items.isEmpty()) {
throw new ItemsNotFoundException();
}
return items;
或者,当我得到DataAccessException时,我应该抛出此异常:
try {
return jdbcTemplate.query(sql, params, new ItemMapper());
} catch (DataAccessException e) {
throw new ItemNotFoundException();
}
答案 0 :(得分:4)
传入不存在的名称不会产生DataAccessException
,因此无效。对于查询的空结果没有什么特别的。
但是,如果结果为空,为什么还要抛出异常?这是一个例外的情况(即,有人会搜索不存在的名称的错误)?如果是这样,这是一种有效的方法。在一般意义上,空列表可能会更好。