Зачем использовать @ResponseBody с @ControllerAdvice в случае RESTServices - PullRequest
1 голос
/ 15 февраля 2020

Я узнаю о глобальной обработке исключений при весенней загрузке. Я разработал контроллер с аннотацией @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 делает?

...