我创建了一个例外:
public class PkDeleteException extends java.lang.Exception {
private static final long serialVersionUID = 1L;
public PkDeleteException(String msg) {
super(msg);
}
}
现在我把它扔进了一些代码的catch块中:
import com.ambre.pta.utils.PkDeleteException;
public class AdminRole {
@Autowired
private Environment env;
@Autowired
private RoleDAO roleDao;
public void del(@RequestParam String id) {
try {
roleDao.delete(id);
} catch (org.hibernate.exception.ConstraintViolationException e) {
Role role = roleDao.get(id);
String errMsg = env.getProperty("admin.list.profils.err.suppr");
errMsg = errMsg.replace("%s", role.getRole_lib());
throw new PkDeleteException(errMsg);
}
}
}
但我收到错误Unhandled exception type PkDeleteException
!
Eclipse提出了一些建议的解决方案,但我不想遵循它们!那么为什么会出现这个错误?
答案 0 :(得分:1)
一般情况下或者对于大多数情况,您永远不会通过直接扩展java.lang.Exception
类来创建自定义异常,而是需要扩展java.lang.RuntimeException
类(或者它的子类型,这是更优选的)
当您检查当前PkDeleteException
时,您需要在方法签名中使用throws子句声明(选项-2,不是优选的),或者最佳做法是将其转换为进入未经检查的例外情况(选项-1 ),如下所示:
选项(1) - 使用未选中的例外(优先):
public class PkDeleteException extends RuntimeExcetion {
private static final long serialVersionUID = 1L;
public PkDeleteException(String msg) {
super(msg);
}
}
选项(2):更改您的方法签名
这
public void del(@RequestParam String id)
到
public void del(@RequestParam String id) throws PkDeleteException
我建议你看一下here
答案 1 :(得分:-1)
你的del方法应该抛出PkDeleteException。 你的方法应该如下
public void del(@RequestParam String id) throws PkDeleteException {
try {
roleDao.delete(id);
} catch (org.hibernate.exception.ConstraintViolationException e) {
Role role = roleDao.get(id);
String errMsg = env.getProperty("admin.list.profils.err.suppr");
errMsg = errMsg.replace("%s", role.getRole_lib());
throw new PkDeleteException(errMsg);
}
}