我有一個休息控制器和 Spring AOP 類,它捕獲服務級別自定義例外并記錄它們,但我還需要從控制器端記錄例外。
這是我的 Spring AOP 類;
@Aspect
@Component
public class ExceptionLoggerAspect {
@AfterThrowing(pointcut = "execution(* com.b.m.service.GaService.*(..)) ", throwing = "ex")
public void logError(JoinPoint joinPoint, GaException ex) {
Signature signature = joinPoint.getSignature();
String methodName = signature.getName();
String stuff = signature.toString();
String arguments = Arrays.toString(joinPoint.getArgs());
LOGGER.error("Exception have been caught in method:\n "
"[" methodName "] with arguments "
arguments " and the full toString: [" stuff "] \n the exception is: ["
ex.type.getMessage() " - " ex.type.getAdditionalInfo() "]");
}
}
如何在此處添加我的控制器類以記錄例外?我用“執行”切入點添加了我的控制器包路徑,但它不起作用。
uj5u.com熱心網友回復:
從 Spring 3.2 開始,您可以使用@ControllerAdvice它允許我們將@ExceptionHandlers之前分散的多個合并為一個全域錯誤處理組件。這也將使我們能夠完全控制回應的主體以及狀態代碼。
@ControllerAdvice
public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {Exception.class})
public ResponseEntity<Object> handleGenericExceptions(Exception exception, WebRequest webRequest) {
log.error("Handling: ", exception);
HttpStatus errorCode = HttpStatus.INTERNAL_SERVER_ERROR;
return this.handleExceptionInternal(exception, "Unexpected Internal Server Error", new HttpHeaders(), errorCode, webRequest);
}
}
uj5u.com熱心網友回復:
使用@ControllerAdivce
@Slf4j
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex) {
log.error("Exception occurred", ex);
ErrorResponse errorResponse = ErrorResponse.builder().code(Error.UNKNOWN_ERROR.getCode())
.message(Error.UNKNOWN_ERROR.getMessage()).build();
return new ResponseEntity<>(errorResponse, Error.UNKNOWN_ERROR.getHttpStatus());
}
}
使用錯誤回應 Bean 發送其余回應。
public class ErrorResponse implements Serializable {
private static final long serialVersionUID = -2405172041950251807L;
private Integer code;
private String message;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/377703.html
標籤:爪哇 春天 休息 奥普 spring-aop
