0

我有大约 20 到 30 种不同类型的不同异常,它们都在 Java 中扩展异常类。一个例子是:

public class NoHandlerFoundException extends Exception {

private static final long serialVersionUID = -9079454849611061074L;

public NoHandlerFoundException() {
    super();
}

public NoHandlerFoundException(final String message) {
    super(message);
}

}

另一个例子是:

public class ResourceNotFoundException extends Exception{

private static final long serialVersionUID = -9079454849611061074L;

public ResourceNotFoundException() {
    super();
}

public ResourceNotFoundException(final String message) {
    super(message);
}

}

还有很多。如您所见,大部分代码都是重复的,然后我使用 ControllerAdvice 之类的(我知道 ControllerAdvice 参数异常类中的代码应该是正确的):

@ExceptionHandler({NoHandlerFoundException.class, ResourceNotFoundException.class})
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public @ResponseBody ExceptionResponse handleResourceNotFound(final NoHandlerFoundException exception,
        final HttpServletRequest request) {

    ExceptionResponse error = new ExceptionResponse();
    error.setErrorMessage(exception.getMessage());
    error.callerURL(request.getRequestURI());

    return error;
}

所以我想知道我们是否有任何方法可以优化上述异常,而不是编写单个类做几乎相同的工作 n 次,但仍然想区分它们。谢谢你。

4

1 回答 1

0

您可以使用以下方法来减少代码冗余。

    @ExceptionHandler(value = {NoHandlerFoundException.class, ResourceNotFoundException.class})
protected ResponseEntity handleInvalidDataException(RuntimeException exception, WebRequest request) {

    ExceptionResponse error = new ExceptionResponse();
    error.setErrorMessage(exception.getMessage());
    error.callerURL(request.getRequestURI());

    return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
}
于 2019-09-10T21:27:46.303 回答