我们怎样才能为同一个例外提供不同的海关信息

时间:2016-03-27 05:42:19

标签: java spring hibernate exception java-ee

自从第一次处理这个场景以来,要求知道哪种方法最好。

此处针对所有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.   
  3. "错误:重复的键值违反了唯一约束" uk_param_key" \ n详细信息:键(param_key)=(Test1)已经存在。"

    < / LI>   

1 个答案:

答案 0 :(得分:1)

正如您已经抓住DataIntegrityViolationException异常使用getMostSpecificCause方法来获取异常的实际原因一样。

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

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