- Для обработки ошибок нет необходимости определять класс контроллера, реализующий контроллер ошибок.
Для обработки ошибок во всем приложении вместо записи
@Controller
public class CustomErrorController implements ErrorController{
@RequestMapping("/error")
public String handleError(HttpServletRequest request)
{
...
}
}
используйте класс ниже
@ControllerAdvice
public class myExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public final ResponseEntity<YourResponseClass> handleAllExceptions(Exception ex, WebRequest request) {
YourResponseClassexceptionResponse = new YourResponseClass(new Date(), ex.getMessage());// Its an example you can define a class with your own structure
return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(CustomException.class)
public final ResponseEntity<YourResponseClass> handleAllExceptions(Exception ex, WebRequest request) {
YourResponseClass exceptionResponse = new YourResponseClass(new Date(), ex.getMessage()); // For reference
return new ResponseEntity<YourResponseClass>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(BadCredentialsException.class)
public final ResponseEntity<YourResponseClass> handleBadCredentialsException(BadCredentialsException ex, WebRequest request){
YourResponseClass exceptionResponse = new YourResponseClass(new Date(), ex.getMessage());// For refernece
return new ResponseEntity<>(exceptionResponse, HttpStatus.UNAUTHORIZED);
}
}
Класс выше, помеченный @ControllerAdvice, действует как пользовательский обработчик исключений и обрабатывает все исключения, создаваемые приложением ur. В приведенном выше примере кода для понимания показаны только три исключения. Он может обрабатывать множество исключений
В вашем приложении, если возникнет какое-либо исключение, оно перейдет в этот класс и отправит ответ обратно. Вы можете настроить сообщение и структуру в соответствии с вашими потребностями.