有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们如何为同一个异常提供不同的海关信息

因为这是第一次处理这种情况,所以我想知道哪种方法是最好的

这里是所有的DataIntegrityViolationException,发送相同的错误消息

@Override
public boolean saveParam(ParamDto dto) throws ParamException 
{
    try 
    {
        return super.save(dto);
    }
    catch(DataIntegrityViolationException e)
    {
        throw new ParamException(ParamException.INTERNAL_SERVER_ERROR, messageSource.getMessage(CodeEnum.DUPLICATE_APP.getValue(), new Object[] { dto.getParamKey() }, Locale.ENGLISH));
    } 
    catch (GenericException ge) 
    {
        throw new ParamException(ge, ge.getRootCauseMessage());
    }
}

对于同一个例外情况,我们如何给出不同的海关信息。我们需要检查消息字符串吗

这里在DataIntegrityViolationException下有两种不同的异常

  1. "ERROR: value too long for type character(1)" (id=172) ""

  2. "ERROR: duplicate key value violates unique constraint "uk_param_key"\n Detail: Key (param_key)=(Test1) already exists."


共 (1) 个答案

  1. # 1 楼答案

    一旦捕捉到DataIntegrityViolationException异常,就可以使用getMostSpecificCause方法获取异常的实际原因

    然后,您可以使用instanceof关键字检查异常是否属于特定类型,并相应地自定义消息。例如,MySQL JDBC驱动程序针对不同类型的错误抛出MysqlDataTruncationMySQLIntegrityConstraintViolationException等。查看文档以查看数据库驱动程序引发的不同类型的异常

    您还可以检查异常消息,并将其与预定义消息进行比较,但这有点棘手,而且容易出错