【发布时间】:2018-07-01 19:42:42
【问题描述】:
我正在尝试捕获实体设置器抛出的异常。
假设我有类 Player,并且想要保存他的进度并拥有
private float progess
我希望它介于 0 和 1 之间。我有 setter
public void setProgress(float progress){
if( progress < 0.0f || progress > 1.0f ) throw new IllegalArgumentException("progress parameter has to be between 0.0 and 0.1");
this.progress = progress;
}
我应该在哪里捕获这个异常?我正在尝试使用
try{
playerDao.save(player)
}catch(IllegalArgumentException e){
...
}
但这并没有抓住它。我在哪里或如何捕捉它,以便我可以记录它等等?感谢您的帮助。
【问题讨论】:
-
你不应该捕获这样的异常。这是一个错误。因此,如果它被抛出,您应该修复尝试传递无效参数的代码。也就是说,如果捕获它是个好主意,try 块应该包含对 setter 的调用。 playerDao.save(player) 没有调用那个setter方法,所以不会抛出异常,因此无法被捕获。
-
但是如果这是某种 REST API 怎么办?并且用户会发布超过 1.0 或小于 0.0 的进度,那么我应该如何处理它
-
如果是外部 API,您不想抛出 IllegalArgumentException。验证 API 中的参数并返回合适的值或抛出某种特定的异常,您或您正在使用的框架可以捕获并转换为有用的东西。而且您只能捕获在 try 块中引发的异常。您的 try 块不包含对 setProgress 的调用,因此不会在此处引发异常并且无法捕获该异常。
标签: java spring exception exception-handling