Я узнаю о глобальной обработке исключений при весенней загрузке. Я разработал контроллер с аннотацией @RestController, который имеет метод контроллера, который выдает исключение. Я разработал другой класс с именем GlobalExceptionHandling, аннотированный @ RestControllerAdvice / @ ControllerAdvice. Он отлично работает и обрабатывает исключение, когда аннотируется с помощью @RestControllerAdvice, но не работает должным образом, когда аннотируется с помощью @ControllerAdvice. Я делюсь своим кодом и ответами, которые я получил от почтальона.
DemoController:
@RestController
public class DemoController {
@RequestMapping("exception/arithmetic")
public String controllerForArithmeticException()
{
throw new ArithmeticException("Divide by zero error");
}
@RequestMapping("exception")
public String controllerForException() throws Exception
{
throw new Exception("An exception occurred");
}
}
GlobalExceptionHandler: (с @RestControllerAdvice)
@RestControllerAdvice
public class GlobalExceptionHandler{
@ExceptionHandler(value = Exception.class)
public String handleException(Exception e)
{
return "Exception: " + e.getMessage();
}
@ExceptionHandler(value = ArithmeticException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleArithmeticException(ArithmeticException e)
{
return "ArithmeticException: " + e.getMessage();
}
}
Ответ почтальона:
Статус: 404 Плохой запрос
Тело ответа: ArithmeticException: Делить на ноль ошибок
Консоль: на консоли ничего не печатается.
GlobalExceptionHandler: (с @ControllerAdvice)
@ControllerAdvice
public class GlobalExceptionHandler{
@ExceptionHandler(value = Exception.class)
public String handleException(Exception e)
{
return "Exception: " + e.getMessage();
}
@ExceptionHandler(value = ArithmeticException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public String handleArithmeticException(ArithmeticException e)
{
return "ArithmeticException: " + e.getMessage();
}
}
Ответ почтальона:
Статус: 404 Плохой запрос
Тело ответа: {"отметка времени": "2020-02-15T12: 41: 40.988 + 0000", "статус": 404, "error": "Not Found", "message": "Ошибка деления на ноль", "path": "/ exception / arithmeti c"}
Консоль: На консоли ничего не печатается.
Можете ли вы объяснить, что именно @ResponseBody делает?