Spring警报邮件系统的空指针异常

时间:2019-06-06 01:18:59

标签: spring spring-boot email exception

我正在为我的项目中创建的Null指针异常或任何其他未经检查的异常寻找Spring警报邮件系统,以便可以在应用程序出现异常时发出警报。目前,我正在使用Spring Boot。我还希望通过邮件发送Request Json,以便我可以分析Request JSON是否包含一些可能造成任何错误的数据。

最初,我在考虑使用@RestControllerAdvice for @ExceptionHandler(value = Exception.class)和调用JavaMailSender.send()的实例,但问题是该方法(例如handleOtherException(Exception ex))仅将Exception ex作为参数,我也希望传入的Request在邮件中添加。

我尝试添加一个参数,如下所示:

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 :(得分:0)

将ExceptionWrapping的概念与Exception Handler结合使用。 因此,您可以定义一个说ResponseException的对象-包装实际异常并存储其他信息(如原始请求或更特定于用户的错误消息)的对象。 在异常控制器中,您可以将此包装的异常发送回客户端。 好处是您只编写了一个用于异常处理的接口。包装在服务器端完成,客户端根据其特定属性访问/处理收到的异常。

您几乎完全正确,服务器端必须有一个附加方法,该方法可以从捕获的异常中生成响应对象。 例如,在客户站点上,您可以使用“访客模式”来处理不同类型的异常。

答案 1 :(得分:0)

除了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