Support HandlerMethod arg in @ExceptionHandler methods
Issue: SPR-12605
This commit is contained in:
parent
2bf6b41bcc
commit
d68fde57cd
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2014 the original author or authors.
|
* Copyright 2002-2015 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -359,7 +359,7 @@ public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExce
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
|
logger.debug("Invoking @ExceptionHandler method: " + exceptionHandlerMethod);
|
||||||
}
|
}
|
||||||
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception);
|
exceptionHandlerMethod.invokeAndHandle(webRequest, mavContainer, exception, handlerMethod);
|
||||||
}
|
}
|
||||||
catch (Exception invocationEx) {
|
catch (Exception invocationEx) {
|
||||||
if (logger.isErrorEnabled()) {
|
if (logger.isErrorEnabled()) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2013 the original author or authors.
|
* Copyright 2002-2015 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -201,6 +201,23 @@ public class ExceptionHandlerExceptionResolverTests {
|
||||||
assertEquals("TestExceptionResolver: IllegalStateException", this.response.getContentAsString());
|
assertEquals("TestExceptionResolver: IllegalStateException", this.response.getContentAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SPR-12605
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolveExceptionWithHandlerMethodArg() throws Exception {
|
||||||
|
AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyConfig.class);
|
||||||
|
this.resolver.setApplicationContext(cxt);
|
||||||
|
this.resolver.afterPropertiesSet();
|
||||||
|
|
||||||
|
ArrayIndexOutOfBoundsException ex = new ArrayIndexOutOfBoundsException();
|
||||||
|
HandlerMethod handlerMethod = new HandlerMethod(new ResponseBodyController(), "handle");
|
||||||
|
ModelAndView mav = this.resolver.resolveException(this.request, this.response, handlerMethod, ex);
|
||||||
|
|
||||||
|
assertNotNull("Exception was not handled", mav);
|
||||||
|
assertTrue(mav.isEmpty());
|
||||||
|
assertEquals("HandlerMethod: handle", this.response.getContentAsString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveExceptionControllerAdviceHandler() throws Exception {
|
public void resolveExceptionControllerAdviceHandler() throws Exception {
|
||||||
AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyControllerAdviceConfig.class);
|
AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyControllerAdviceConfig.class);
|
||||||
|
@ -289,6 +306,12 @@ public class ExceptionHandlerExceptionResolverTests {
|
||||||
public String handleException(IllegalStateException ex) {
|
public String handleException(IllegalStateException ex) {
|
||||||
return "TestExceptionResolver: " + ClassUtils.getShortName(ex.getClass());
|
return "TestExceptionResolver: " + ClassUtils.getShortName(ex.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler(ArrayIndexOutOfBoundsException.class)
|
||||||
|
@ResponseBody
|
||||||
|
public String handleWithHandlerMethod(HandlerMethod handlerMethod) {
|
||||||
|
return "HandlerMethod: " + handlerMethod.getMethod().getName();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ControllerAdvice
|
@ControllerAdvice
|
||||||
|
|
Loading…
Reference in New Issue