Я использую @ExceptionHandler для управления всем моим исключением и для возврата ответа JSON для любого REST API, который генерирует исключение. На данный момент я управляю двумя исключениями, первый - это ResourceNotFoundException, и он работает, но второй, FileExtensionException, не работает. Он выбрасывает это исключение в консоли eclipse и ничего не реагирует на ответ.Исключение с ответом Spring ExceptionHandler и Rest
2015-09-21 09: 09: 05,197 ОШИБКА 7500 --- [NiO-8080-Exec-2] .mmaExceptionHandlerExceptionResolver: Не удалось вызвать метод @ExceptionHandler: общественный matlab.ErrorResponse Matlab. ErrorController.errorHandler (java.lang.Exception)
org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление на org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters (AbstractMessageConverterMethodProcessor. java: 173) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters (AbstractMessageConverterMethodProcessor.java:101) на org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue (RequestResponseBodyMethodProcessor.java: 185) на org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue (HandlerMethodReturnValueHandlerComposite.java:71) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java: 126) по адресу org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResol ver.doResolveHandlerMethodException (ExceptionHandlerExceptionResolver.java:362) на org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException (AbstractHandlerMethodExceptionResolver.java:60) на org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException (AbstractHandlerExceptionResolver.java:138) на org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException (HandlerExceptionResolverComposite.java:74) на org.springframework.web.servlet.DispatcherServlet.processHandlerException (DispatcherServlet.java:1183) по адресу org.springframework.web.servlet.DispatcherServlet.processDispatc HRESULT (DispatcherServlet.java:1020) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:971) на org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:893) на org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:967) на org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:858) в javax.servlet.http. HttpServlet.service (HttpServlet.java:622) в org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:843) по адресу javax.servlet.http.HttpServlet.service (HttpServlet.java:729) по адресу org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:291) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.tomcat.websocket .server.WsFilter.doFilter (WsFilter.Java: 52) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в орг .springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain .internalDoFilter (ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:85) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в org.apache.catalina .core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:116) по адресу org.springframework.boot.context.web.ErrorPageFilter.access $ 000 (ErrorPageFilter.java:60) at org.springframework.boot.context.web.ErrorPageFilter $ 1.doFilterInternal (ErrorPageFilter.java:91) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.springframework. boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:109) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain. doFilter (ApplicationFilterChain.java:206) по адресу org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:219) по адресу org.apache.catali na.core.StandardContextValve.invoke (StandardContextValve.java:106) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) на org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:616) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:88) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:518) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1091) на org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:673) в org.apache.tomcat.util .net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1526) на org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1482) в java.util.concurrent.ThreadPoolExecutor .runWorker (ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) по адресу org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:745)
2015-09-21 09: 09: 05,201 ОШИБКА 7500 --- [nio- 8080-Exec-2] osboot.context.web.ErrorPageFilter: Перенаправление на страницу ошибки из запроса [/ ManagmentFile/zipDownload] из-за исключением [ выбранный файл имеет другое расширение: XLSX, а не почтовый]
matlab.FileExtensionException: выбранный файл имеет другое расширение : xlsx и не zip на matlab.FileServices.getZipFile (FileServices.java:46) на matlab.ws.FileManagerImpl.getZip (FileManage rImpl.java:38) при sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43) в java.lang.reflect.Method.invoke (Method.java:497) при org.springframework.web.method.support.InvocableHandlerMethod.doInvoke (InvocableHandlerMethod.java:221) в org.springframework.web .method.support.InvocableHandlerMethod.invokeForRequest (InvocableHandlerMethod.java:137) на org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle (ServletInvocableHandlerMethod.java:110) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod (RequestMappingHandlerAdapter.java:776) на org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal (RequestMappingHandlerAdapter. Java: 705) на org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle (AbstractHandlerMethodAdapter.java:85) на org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:959) по адресу org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:893) по адресу org.springframework.web.servl et.FrameworkServlet.processRequest (FrameworkServlet.java:967) на org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:858) на javax.servlet.http.HttpServlet.service (HttpServlet.java:622) при org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java:843) в javax.servlet.http.HttpServlet.service (HttpServlet.java:729) в org.apache.catalina.core.ApplicationFilterChain .internalDoFilter (ApplicationFilterChain.java:291) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java : 52) - org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.web.filter .HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java : 239) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.Java: 206) на org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:85) на org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в орг .apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) на org.springframework.boot.context.web .ErrorPageFilter.doFilter (ErrorPageFilter.java:116) по адресу org.springframework.boot.context.web.ErrorPageFilter.access $ 000 (ErrorPageFilter.java:60) в org.springframework.boot.context.web.ErrorPageFilter $ 1.doFilterInternal (ErrorPageFilter.java:91) в org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107) в орг. springframework.boot.context.web.ErrorPageFilter.doFilter (ErrorPageFilter.java:109) на org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:239) на org.apache.catalina.core. ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) по адресу org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:219) по адресу org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:106) на org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) на org.apache.catalina.core .StandardHostValve.invoke (StandardHostValve.java:142) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) на org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java : 616) на org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:88) на org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:518) на org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1091) в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:673) в org.apache.tomcat .util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1526) на org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1482) в java.util.concurrent .ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в org.apache.tomcat.util.t hreads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) at java.lang.Thread.run (Thread.Java: 745)
Эти коды, вызываемые веб-сервисов:
public FileSystemResource getZipFile(String fileName) throws FileExtensionException {
String ext=FilenameUtils.getExtension(fileName);
if (ext!= "zip")
throw new FileExtensionException(ext + " and not zip");
return new FileSystemResource(new File(fileName));
}
исключение:
package matlab;
public class FileExtensionException extends RuntimeException {
private static final long serialVersionUID = 1L;
public FileExtensionException(String message){
super("The selected file has a different extension:" + message);
}
}
RestController:
@RequestMapping(value = "/files", method = RequestMethod.GET)
public Response<Collection<FileModel>> getAllFiles(@RequestParam(value="path", defaultValue="/home") String path) throws ResourceNotFoundException {
Collection<FileModel> result;
result = file.getAllFiles(path);
return new Response<Collection<FileModel>>(HttpStatus.OK.value(),result);
}
@RequestMapping(value = "/zipDownload", produces="application/zip", method = RequestMethod.GET)
@ResponseBody
public FileSystemResource getZip(@RequestParam(value="filePath", required=true) String filePath) throws FileExtensionException{
return file.getZipFile(filePath);
}
ResourceNotFoundException
public class ResourceNotFoundException extends Exception {
private static final long serialVersionUID = 1L;
public ResourceNotFoundException(String path){
super("The specified path: "+ path +" doesn't exist");
}
}
ErrorControl
@ControllerAdvice
public class ErrorController {
/**
*
* @param e: exception thrown
* @return ErroreResponse
*/
@ExceptionHandler(Exception.class)
public @ResponseBody ErrorResponse errorHandler(Exception e){
//Make the exception by buildErrorResponse
return ErrorResponseBuilder.buildErrorResponse(e);
}
}
ошибка сборки:
public class ErrorResponseBuilder {
public ErrorResponseBuilder() {
}
/**
* Build exception response beginning from exception
* @param e exception thrown
* @return ErrorResponse: response of an exception
*/
public static ErrorResponse buildErrorResponse(Exception e){
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
return new ErrorResponse(HttpStatusManager.getHttpCode(e),e.getClass().getName(),e.getMessage(),errors.toString());
}
}
Где проблема? Благодаря
я изменился, но проблема здесь. Кроме того, как FileExtensionException, так и ResourceNotFoundException использовали исключение RuntimeException. Исключения обрабатываются и строить, но Отвечает FileExtensionException бросает исключение – luca
ОК, я вижу проблема 'org.springframework.web.HttpMediaTypeNotAcceptableException: Не удалось найти приемлемые representation' Пожалуйста, обратите внимание на эти сообщения: HTTP: // StackOverflow. com/questions/7197268/spring-mvc-httpmediatypenotacceptableexception http://stackoverflow.com/questions/3340050/springs-json-not-being-resolved-with-appro-response –
Это поможет мне подумать: http://stackoverflow.com/a/30335453/1397258 –