是否有人知道使用@ExceptionHandler
进行包装异常的最佳/最简单方法?
我有一个用于转换org.springframework.core.convert.converter.Converter
的自定义@PathVariable
,如果输入超出标准范围,它会抛出自定义运行时异常。
这最终被Spring ConversionException
包裹起来,我可以在我的Controller建议中使用@ExceptionHandler(ConversionException.class)
处理。
但是我必须.getCause()
并使用instanceof
来确定基础异常是否是我感兴趣的类型。此时我可以使用对.sendError()
的响应但是如果我有不同的潜在例外,我不知道该怎么办?
如果我重新抛出原始异常,我会收到一条令人讨厌的日志消息'无法调用@ExceptionHandler方法',它感觉不对。
是否有一种简单的方法可以执行@ExceptionHandler(MyCustomConversionException.class
),其中MyCustomConversionException
是ConversionException
中@ControllerAdvice
的原因?
谢谢!
答案 0 :(得分:0)
创建一个ControllerAdvice类@ControllerAdvice
,允许您创建多个@ExceptionHandler
条目。每种方法都可以引用单个异常或多个异常。
例如:
@ControllerAdvice
public class ExceptionController extends ResponseExceptionHanlder {
@ExceptionHandler(value = { NumberFormatException.class })
protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
//TODO: Handle exception
return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
@ExceptionHandler(value = { InvalidClassException.class })
protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
//TODO: Handle exception
return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
@ExceptionHandler(value = { MaxUploadSizeExceededException.class, SizeLimitExceededException.class })
protected ResponseEntity<Object> handleNumberFormatExcpetion(Exception ex, WebRequest request) {
//TODO: Handle exception
return handleExceptionInternal(ex, 'error', new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
}