抛出异常会导致未处理异常的错误

时间:2016-11-02 06:53:09

标签: java spring

我创建了一个例外:

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提出了一些建议的解决方案,但我不想遵循它们!那么为什么会出现这个错误?

2 个答案:

答案 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);

    }

}