【问题标题】:How can we give different customs messages for the same exception我们如何为同一个例外提供不同的海关信息
【发布时间】:2016-03-27 05:42:19
【问题描述】:

自从第一次处理这种情况以来,想知道哪种方法最好。

这里为所有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. “错误:类型字符 (1) 的值太长”(id=172)“”

  2. “错误:重复键值违反唯一约束“uk_param_key”\n 详细信息:键 (param_key)=(Test1) 已存在。”

【问题讨论】:

标签: java spring hibernate exception jakarta-ee


【解决方案1】:

正如您在捕获DataIntegrityViolationException 异常后所做的那样,使用getMostSpecificCause 方法来获取异常的实际原因。

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

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

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 2021-10-29
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多