|
|
|
@ -71,14 +71,11 @@ import org.springframework.web.util.WebUtils; |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
* @author Rossen Stoyanchev |
|
|
|
* @since 3.2 |
|
|
|
* @since 3.2 |
|
|
|
* |
|
|
|
|
|
|
|
* @see #handleException(Exception, WebRequest) |
|
|
|
* @see #handleException(Exception, WebRequest) |
|
|
|
* @see org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver |
|
|
|
* @see org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public abstract class ResponseEntityExceptionHandler { |
|
|
|
public abstract class ResponseEntityExceptionHandler { |
|
|
|
|
|
|
|
|
|
|
|
protected final Log logger = LogFactory.getLog(getClass()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Log category to use when no mapped handler is found for a request. |
|
|
|
* Log category to use when no mapped handler is found for a request. |
|
|
|
* @see #pageNotFoundLogger |
|
|
|
* @see #pageNotFoundLogger |
|
|
|
@ -86,11 +83,16 @@ public abstract class ResponseEntityExceptionHandler { |
|
|
|
public static final String PAGE_NOT_FOUND_LOG_CATEGORY = "org.springframework.web.servlet.PageNotFound"; |
|
|
|
public static final String PAGE_NOT_FOUND_LOG_CATEGORY = "org.springframework.web.servlet.PageNotFound"; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Additional logger to use when no mapped handler is found for a request. |
|
|
|
* Specific logger to use when no mapped handler is found for a request. |
|
|
|
* @see #PAGE_NOT_FOUND_LOG_CATEGORY |
|
|
|
* @see #PAGE_NOT_FOUND_LOG_CATEGORY |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected static final Log pageNotFoundLogger = LogFactory.getLog(PAGE_NOT_FOUND_LOG_CATEGORY); |
|
|
|
protected static final Log pageNotFoundLogger = LogFactory.getLog(PAGE_NOT_FOUND_LOG_CATEGORY); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Common logger for use in subclasses. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
protected final Log logger = LogFactory.getLog(getClass()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Provides handling for standard Spring MVC exceptions. |
|
|
|
* Provides handling for standard Spring MVC exceptions. |
|
|
|
@ -115,9 +117,7 @@ public abstract class ResponseEntityExceptionHandler { |
|
|
|
NoHandlerFoundException.class |
|
|
|
NoHandlerFoundException.class |
|
|
|
}) |
|
|
|
}) |
|
|
|
public final ResponseEntity<Object> handleException(Exception ex, WebRequest request) { |
|
|
|
public final ResponseEntity<Object> handleException(Exception ex, WebRequest request) { |
|
|
|
|
|
|
|
|
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
HttpHeaders headers = new HttpHeaders(); |
|
|
|
|
|
|
|
|
|
|
|
if (ex instanceof NoSuchRequestHandlingMethodException) { |
|
|
|
if (ex instanceof NoSuchRequestHandlingMethodException) { |
|
|
|
HttpStatus status = HttpStatus.NOT_FOUND; |
|
|
|
HttpStatus status = HttpStatus.NOT_FOUND; |
|
|
|
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) ex, headers, status, request); |
|
|
|
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) ex, headers, status, request); |
|
|
|
@ -202,7 +202,6 @@ public abstract class ResponseEntityExceptionHandler { |
|
|
|
if (HttpStatus.INTERNAL_SERVER_ERROR.equals(status)) { |
|
|
|
if (HttpStatus.INTERNAL_SERVER_ERROR.equals(status)) { |
|
|
|
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, ex, WebRequest.SCOPE_REQUEST); |
|
|
|
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, ex, WebRequest.SCOPE_REQUEST); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return new ResponseEntity<Object>(body, headers, status); |
|
|
|
return new ResponseEntity<Object>(body, headers, status); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -242,7 +241,6 @@ public abstract class ResponseEntityExceptionHandler { |
|
|
|
if (!supportedMethods.isEmpty()) { |
|
|
|
if (!supportedMethods.isEmpty()) { |
|
|
|
headers.setAllow(supportedMethods); |
|
|
|
headers.setAllow(supportedMethods); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return handleExceptionInternal(ex, null, headers, status, request); |
|
|
|
return handleExceptionInternal(ex, null, headers, status, request); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -443,8 +441,8 @@ public abstract class ResponseEntityExceptionHandler { |
|
|
|
* @return a {@code ResponseEntity} instance |
|
|
|
* @return a {@code ResponseEntity} instance |
|
|
|
* @since 4.0 |
|
|
|
* @since 4.0 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, |
|
|
|
protected ResponseEntity<Object> handleNoHandlerFoundException( |
|
|
|
HttpStatus status, WebRequest request) { |
|
|
|
NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { |
|
|
|
|
|
|
|
|
|
|
|
return handleExceptionInternal(ex, null, headers, status, request); |
|
|
|
return handleExceptionInternal(ex, null, headers, status, request); |
|
|
|
} |
|
|
|
} |
|
|
|
|