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
下有两种不同的异常
"ERROR: value too long for type character(1)" (id=172) ""
"ERROR: duplicate key value violates unique constraint "uk_param_key"\n Detail: Key (param_key)=(Test1) already exists."
# 1 楼答案
一旦捕捉到
DataIntegrityViolationException
异常,就可以使用getMostSpecificCause方法获取异常的实际原因然后,您可以使用
instanceof
关键字检查异常是否属于特定类型,并相应地自定义消息。例如,MySQL JDBC驱动程序针对不同类型的错误抛出MysqlDataTruncation
、MySQLIntegrityConstraintViolationException
等。查看文档以查看数据库驱动程序引发的不同类型的异常您还可以检查异常消息,并将其与预定义消息进行比较,但这有点棘手,而且容易出错