@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2009 the original author or authors .
* Copyright 2002 - 201 0 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -31,9 +31,9 @@ import org.springframework.http.converter.HttpMessageNotReadableException;
@@ -31,9 +31,9 @@ import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException ;
import org.springframework.util.CollectionUtils ;
import org.springframework.util.StringUtils ;
import org.springframework.web.HttpMediaTypeNotAcceptableException ;
import org.springframework.web.HttpMediaTypeNotSupportedException ;
import org.springframework.web.HttpRequestMethodNotSupportedException ;
import org.springframework.web.HttpMediaTypeNotAcceptableException ;
import org.springframework.web.bind.MissingServletRequestParameterException ;
import org.springframework.web.servlet.ModelAndView ;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver ;
@ -41,11 +41,13 @@ import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMeth
@@ -41,11 +41,13 @@ import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMeth
/ * *
* Default implementation of the { @link org . springframework . web . servlet . HandlerExceptionResolver
* HandlerExceptionResolver } interface that resolves standard Spring exceptions . < p > Default implementations typically
* set the response status to a corresponding HTTP status code . < p > This exception resolver is enabled by default in the
* { @link org . springframework . web . servlet . DispatcherServlet } .
* HandlerExceptionResolver } interface that resolves standard Spring exceptions and translates
* them to corresponding HTTP status codes .
*
* < p > This exception resolver is enabled by default in the { @link org . springframework . web . servlet . DispatcherServlet } .
*
* @author Arjen Poutsma
* @since 3 . 0
* @see # handleNoSuchRequestHandlingMethod
* @see # handleHttpRequestMethodNotSupported
* @see # handleHttpMediaTypeNotSupported
@ -53,34 +55,34 @@ import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMeth
@@ -53,34 +55,34 @@ import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMeth
* @see # handleTypeMismatch
* @see # handleHttpMessageNotReadable
* @see # handleHttpMessageNotWritable
* @since 3 . 0
* /
public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionResolver {
/ * *
* Log category to use when no mapped handler is found for a request .
*
* @see # pageNotFoundLogger
* /
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 .
*
* @see # PAGE_NOT_FOUND_LOG_CATEGORY
* /
protected static final Log pageNotFoundLogger = LogFactory . getLog ( PAGE_NOT_FOUND_LOG_CATEGORY ) ;
/** Sets the {@linkplain #setOrder(int) order} to {@link #LOWEST_PRECEDENCE}. */
/ * *
* Sets the { @linkplain # setOrder ( int ) order } to { @link # LOWEST_PRECEDENCE } .
* /
public DefaultHandlerExceptionResolver ( ) {
setOrder ( Ordered . LOWEST_PRECEDENCE ) ;
}
@Override
protected ModelAndView doResolveException ( HttpServletRequest request ,
HttpServletResponse response ,
Object handler ,
Exception ex ) {
protected ModelAndView doResolveException ( HttpServletRequest request , HttpServletResponse response ,
Object handler , Exception ex ) {
try {
if ( ex instanceof NoSuchRequestHandlingMethodException ) {
return handleNoSuchRequestHandlingMethod ( ( NoSuchRequestHandlingMethodException ) ex , request , response ,
@ -122,22 +124,20 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
@@ -122,22 +124,20 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
}
/ * *
* Handle the case where no request handler method was found . < p > The default implementation logs a warning , sends an
* HTTP 404 error , and returns an empty { @code ModelAndView } . Alternatively , a fallback view could be chosen , or the
* NoSuchRequestHandlingMethodException could be rethrown as - is .
*
* Handle the case where no request handler method was found .
* < p > The default implementation logs a warning , sends an HTTP 404 error , and returns
* an empty { @code ModelAndView } . Alternatively , a fallback view could be chosen ,
* or the NoSuchRequestHandlingMethodException could be rethrown as - is .
* @param ex the NoSuchRequestHandlingMethodException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleNoSuchRequestHandlingMethod ( NoSuchRequestHandlingMethodException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
pageNotFoundLogger . warn ( ex . getMessage ( ) ) ;
response . sendError ( HttpServletResponse . SC_NOT_FOUND ) ;
@ -145,23 +145,20 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
@@ -145,23 +145,20 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
}
/ * *
* Handle the case where no request handler method was found for the particular HTTP request method . < p > The default
* implementation logs a warning , sends an HTTP 405 error , sets the "Allow" header , and returns an empty { @code
* ModelAndView } . Alternatively , a fallback view could be chosen , or the HttpRequestMethodNotSupportedException could
* be rethrown as - is .
*
* Handle the case where no request handler method was found for the particular HTTP request method .
* < p > The default implementation logs a warning , sends an HTTP 405 error , sets the "Allow" header ,
* and returns an empty { @code ModelAndView } . Alternatively , a fallback view could be chosen ,
* or the HttpRequestMethodNotSupportedException could be rethrown as - is .
* @param ex the HttpRequestMethodNotSupportedException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleHttpRequestMethodNotSupported ( HttpRequestMethodNotSupportedException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
pageNotFoundLogger . warn ( ex . getMessage ( ) ) ;
String [ ] supportedMethods = ex . getSupportedMethods ( ) ;
@ -174,22 +171,19 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
@@ -174,22 +171,19 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
/ * *
* Handle the case where no { @linkplain org . springframework . http . converter . HttpMessageConverter message converters }
* were found for the PUT or POSTed content . < p > The default implementation sends an HTTP 415 error , sets the "Accept"
* header , and returns an empty { @code ModelAndView } . Alternatively , a fallback view could be chosen , or the
* HttpMediaTypeNotSupportedException could be rethrown as - is .
*
* were found for the PUT or POSTed content . < p > The default implementation sends an HTTP 415 error ,
* sets the "Accept" header , and returns an empty { @code ModelAndView } . Alternatively , a fallback
* view could be chosen , or the HttpMediaTypeNotSupportedException could be rethrown as - is .
* @param ex the HttpMediaTypeNotSupportedException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleHttpMediaTypeNotSupported ( HttpMediaTypeNotSupportedException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_UNSUPPORTED_MEDIA_TYPE ) ;
List < MediaType > mediaTypes = ex . getSupportedMediaTypes ( ) ;
@ -202,131 +196,119 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
@@ -202,131 +196,119 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
/ * *
* Handle the case where no { @linkplain org . springframework . http . converter . HttpMessageConverter message converters }
* were found that were acceptable for the client ( expressed via the { @code Accept } header .
* < p > The default implementation sends an HTTP 406 error and returns an empty { @code ModelAndView } . Alternatively ,
* a fallback view could be chosen , or the HttpMediaTypeNotAcceptableException could be rethrown as - is .
*
* < p > The default implementation sends an HTTP 406 error and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the HttpMediaTypeNotAcceptableException
* could be rethrown as - is .
* @param ex the HttpMediaTypeNotAcceptableException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleHttpMediaTypeNotAcceptable ( HttpMediaTypeNotAcceptableException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_NOT_ACCEPTABLE ) ;
return new ModelAndView ( ) ;
}
/ * *
* Handle the case when a required parameter is missing . < p > The default implementation sends an HTTP 400 error , and
* returns an empty { @code ModelAndView } . Alternatively , a fallback view could be chosen , or the
* MissingServletRequestParameterException could be rethrown as - is .
*
* Handle the case when a required parameter is missing .
* < p > The default implementation sends an HTTP 400 error , and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the MissingServletRequestParameterException
* could be rethrown as - is .
* @param ex the MissingServletRequestParameterException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleMissingServletRequestParameter ( MissingServletRequestParameterException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_BAD_REQUEST ) ;
return new ModelAndView ( ) ;
}
/ * *
* Handle the case when a { @link org . springframework . web . bind . WebDataBinder } conversion cannot occur . < p > The default
* implementation sends an HTTP 500 error , and returns an empty { @code ModelAndView } . Alternatively , a fallback view
* could be chosen , or the TypeMismatchException could be rethrown as - is .
*
* Handle the case when a { @link org . springframework . web . bind . WebDataBinder } conversion cannot occur .
* < p > The default implementation sends an HTTP 500 error , and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the TypeMismatchException could be rethrown as - is .
* @param ex the ConversionNotSupportedException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleConversionNotSupported ( ConversionNotSupportedException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_INTERNAL_SERVER_ERROR ) ;
return new ModelAndView ( ) ;
}
/ * *
* Handle the case when a { @link org . springframework . web . bind . WebDataBinder } conversion error occurs . < p > The default
* implementation sends an HTTP 400 error , and returns an empty { @code ModelAndView } . Alternatively , a fallback view
* could be chosen , or the TypeMismatchException could be rethrown as - is .
*
* Handle the case when a { @link org . springframework . web . bind . WebDataBinder } conversion error occurs .
* < p > The default implementation sends an HTTP 400 error , and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the TypeMismatchException could be rethrown as - is .
* @param ex the TypeMismatchException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleTypeMismatch ( TypeMismatchException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_BAD_REQUEST ) ;
return new ModelAndView ( ) ;
}
/ * *
* Handle the case where a { @linkplain org . springframework . http . converter . HttpMessageConverter message converter } can
* not read from a HTTP request . < p > The default implementation sends an HTTP 400 error , and returns an empty { @code
* ModelAndView } . Alternatively , a fallback view could be chosen , or the HttpMediaTypeNotSupportedException could be
* Handle the case where a { @linkplain org . springframework . http . converter . HttpMessageConverter message converter }
* cannot read from a HTTP request .
* < p > The default implementation sends an HTTP 400 error , and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the HttpMediaTypeNotSupportedException could be
* rethrown as - is .
*
* @param ex the HttpMessageNotReadableException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleHttpMessageNotReadable ( HttpMessageNotReadableException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_BAD_REQUEST ) ;
return new ModelAndView ( ) ;
}
/ * *
* Handle the case where a { @linkplain org . springframework . http . converter . HttpMessageConverter message converter } can
* not write to a HTTP request . < p > The default implementation sends an HTTP 500 error , and returns an empty { @code
* ModelAndView } . Alternatively , a fallback view could be chosen , or the HttpMediaTypeNotSupportedException could be
* Handle the case where a { @linkplain org . springframework . http . converter . HttpMessageConverter message converter }
* cannot write to a HTTP request .
* < p > The default implementation sends an HTTP 500 error , and returns an empty { @code ModelAndView } .
* Alternatively , a fallback view could be chosen , or the HttpMediaTypeNotSupportedException could be
* rethrown as - is .
*
* @param ex the HttpMessageNotWritableException to be handled
* @param request current HTTP request
* @param response current HTTP response
* @param handler the executed handler , or < code > null < / code > if none chosen at the time of the exception ( for example ,
* if multipart resolution failed )
* @param handler the executed handler , or < code > null < / code > if none chosen
* at the time of the exception ( for example , if multipart resolution failed )
* @return a ModelAndView to render , or < code > null < / code > if handled directly
* @throws Exception an Exception that should be thrown as result of the servlet request
* /
protected ModelAndView handleHttpMessageNotWritable ( HttpMessageNotWritableException ex ,
HttpServletRequest request ,
HttpServletResponse response ,
Object handler ) throws Exception {
HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception {
response . sendError ( HttpServletResponse . SC_INTERNAL_SERVER_ERROR ) ;
return new ModelAndView ( ) ;