Система оповещения Spring для исключения нулевого указателя - PullRequest
0 голосов
/ 06 июня 2019

Я ищу почтовую систему Spring для оповещения об исключении нулевого указателя или любом другом непроверенном исключении, созданном в моем проекте, чтобы я мог получать оповещения о том, что что-то идет не так в приложении. В настоящее время я использую весеннюю загрузку. Я также хочу, чтобы Request Json отправлялся по почте, чтобы я мог проанализировать, есть ли в Request JSON какие-либо данные, которые могут вызывать какие-либо ошибки.

Изначально я думал об использовании @RestControllerAdvice for @ExceptionHandler(value = Exception.class) и вызове экземпляра JavaMailSender.send(), но проблема в том, что метод (скажем, handleOtherException (Exception ex)) будет принимать только Exception ex в качестве аргумента, и я также хочу, чтобы входящий запрос был добавлен в почта.

Я попытался добавить один параметр, как показано ниже:

protected ResponseEntity<Object> handleOtherException(Exception ex,@RequestBody Student s1)

Но я получил ошибку ниже:

java.lang.IllegalStateException: Could not resolve method parameter at index 1 in protected org.springframework.http.ResponseEntity<java.lang.Object> com.example.demo.GlobalExceptionHandler.handleOtherException(java.lang.Exception,com.example.demo.Student) throws com.fasterxml.jackson.core.JsonProcessingException: No suitable resolver for argument 1 of type 'com.example.demo.Student'

Я также пытался заглянуть в github, но не смог найти ничего подобного. Пожалуйста, предложите любой код или подход для решения этой проблемы.

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

В дополнение к ответу Panzerkroete вы должны добавить свой собственный настроенный ExceptionHandler, как показано ниже

@ControllerAdvice
public class ExceptionHandler {

    @ExceptionHandler
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public CustomResponse handle(BadRequestException badRequest) {
        return getResponse(badRequest);     
    }

    public CustomResponse getResponse(Exception exception) {
        CustomResponse customResponse = new CustomResponse(exception.getMessage());
        //Call Mail Api with customResponse Object
        return customResponse;
    }
}

добавить класс CustomResponse, который будет содержать подробности ошибки

добавить пользовательское исключение BadRequestException, которое расширит RuntimeException

теперь вам просто нужно бросить нулевой указатель в любое другое непроверенное исключение (в вышеприведенном случае генерировать BadRequestException), которое в свою очередь вызовет ExceptionHandler

0 голосов
/ 06 июня 2019

Используйте концепцию ExceptionWrapping в сочетании с Exception Handler . Таким образом, вы можете определить let скажем ResponseException - Объект, который оборачивает фактическое исключение и хранит дополнительную информацию, такую ​​как исходный запрос или более специфический пользовательский массаж ошибок. В Exception-Controller вы можете отправить это упакованное исключение обратно клиенту. Преимущество в том, что у вас есть только один интерфейс для обработки исключений. Упаковка выполняется на стороне сервера, и клиент посещает / обрабатывает полученное исключение на основе своих специфических свойств.

Вы поняли это почти правильно, на стороне сервера должен быть дополнительный метод, который генерирует объект ответа из перехваченного исключения. На клиентском сайте вы можете, например, использовать шаблон посетителя для обработки различных типов исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...