我正在为我的项目中创建的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中查找,但找不到任何此类内容。请提出解决此问题的任何代码或方法。
答案 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