Error redirecting to custom error page in Spring boot application

I use spring boot, and I created the following custom error controller to handle errors:

@Controller public class AppErrorController implements ErrorController { private static final String PATH = "/error"; @RequestMapping(value = "/pageNotFound", method = { RequestMethod.GET, RequestMethod.POST }) public String pageNotFound() { return "pageNotFound"; } @RequestMapping(value = "/accessDenied", method = { RequestMethod.GET, RequestMethod.POST }) public String accessDenied() { return "accessDenied"; } @RequestMapping(value = PATH) public String error() { return "error"; } @Override public String getErrorPath() { return PATH; } } 

When I receive an error message in the application, it should be redirected to user error pages. Instead, I get the following error in the logs, and even the error page does not display:

 2016-03-09 09:43:21.224 DEBUG 3126 --- [nio-8080-exec-1] swsmmaRequestMappingHandlerMapping : Looking up handler method for path /error 2016-03-09 09:43:21.224 DEBUG 3126 --- [nio-8080-exec-1] swsmmaRequestMappingHandlerMapping : Returning handler method [public java.lang.String com.sts.app.core.common.web.AppErrorController.error()] 2016-03-09 09:43:21.224 DEBUG 3126 --- [nio-8080-exec-1] osbfsDefaultListableBeanFactory : Returning cached instance of singleton bean 'appErrorController' 2016-03-09 09:43:21.225 DEBUG 3126 --- [nio-8080-exec-1] osweb.servlet.DispatcherServlet : Last-Modified value for [/gen/error] is: -1 2016-03-09 09:43:21.225 DEBUG 3126 --- [nio-8080-exec-1] ojsOpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor 2016-03-09 09:43:21.227 DEBUG 3126 --- [nio-8080-exec-1] osbfsDefaultListableBeanFactory : Returning cached instance of singleton bean 'error' 2016-03-09 09:43:21.227 DEBUG 3126 --- [nio-8080-exec-1] osweb.servlet.DispatcherServlet : Rendering view [org.springfram ework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView@ 5efe80ee] in DispatcherServlet with name 'dispatcherServlet' 2016-03-09 09:43:21.235 DEBUG 3126 --- [nio-8080-exec-1] osweb.servlet.DispatcherServlet : Error rendering view [org.springfram ework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView@ 5efe80ee] in DispatcherServlet with name 'dispatcherServlet' org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'timestamp' cannot be found on object of type 'java.util.HashMap' - maybe not public? at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224) ~[spring-expression-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94) ~[spring-expression-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:81) ~[spring-expression-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120) ~[spring-expression-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:242) ~[spring-expression-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$ExpressionResolver.resolvePlaceholder(ErrorMvcAutoConfiguration.java:245) ~[spring-boot-autoconfigure-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.autoconfigure.web.NonRecursivePropertyPlaceholderHelper$NonRecursivePlaceholderResolver.resolvePlaceholder(NonRecursivePropertyPlaceholderHelper.java:56) ~[spring-boot-autoconfigure-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:147) ~[spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.autoconfigure.web.NonRecursivePropertyPlaceholderHelper.parseStringValue(NonRecursivePropertyPlaceholderHelper.java:38) ~[spring-boot-autoconfigure-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView.render(ErrorMvcAutoConfiguration.java:194) ~[spring-boot-autoconfigure-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) [servlet-api.jar:na] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) [spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:na] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:69) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:133) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) [spring-security-web-4.0.3.RELEASE.jar:4.0.3.RELEASE] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) [catalina.jar:8.0.21] at org.springframework.boot.context.web.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:188) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.handleException(ErrorPageFilter.java:171) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:135) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:95) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.21] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.21] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) [catalina.jar:8.0.21] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8.0.21] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:8.0.21] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) [catalina.jar:8.0.21] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.0.21] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) [catalina.jar:8.0.21] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8.0.21] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) [catalina.jar:8.0.21] at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) [tomcat-coyote.jar:8.0.21] at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) [tomcat-coyote.jar:8.0.21] at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) [tomcat-coyote.jar:8.0.21] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517) [tomcat-coyote.jar:8.0.21] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474) [tomcat-coyote.jar:8.0.21] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.21] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45] 2016-03-09 09:43:21.236 DEBUG 3126 --- [nio-8080-exec-1] ojsOpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor 2016-03-09 09:43:21.237 DEBUG 3126 --- [nio-8080-exec-1] osorm.jpa.EntityManagerFactoryUtils : Closing JPA EntityManager 2016-03-09 09:43:21.240 DEBUG 3126 --- [nio-8080-exec-1] osweb.servlet.DispatcherServlet : Could not complete request 

Below is my build.gradle :

 buildscript { repositories { maven { url "http://repo1.maven.org/maven2" } maven { url 'http://repo.spring.io/plugins-release' } } dependencies { classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: spring_boot_version classpath group: 'org.springframework.build.gradle', name: 'propdeps-plugin', version: propdeps_plugin_version } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'eclipse-wtp' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'war' apply plugin: 'propdeps' apply from: './gradle/integration_test.gradle' apply from: './gradle/test_setup.gradle' apply from: './gradle/code_analysis/code_analysis.gradle' war { baseName = 'gen' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.7 targetCompatibility = 1.7 repositories { jcenter() maven { url "http://repo1.maven.org/maven2" } } configurations { providedRuntime } dependencies { compile group: 'org.springframework.boot', name: 'spring-boot-starter-aop' compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa' compile(group: 'org.springframework.boot', name: 'spring-boot-starter-web') { exclude module: 'spring-boot-starter-tomcat' } compile group: 'org.springframework.boot', name: 'spring-boot-starter-security' compile group: 'org.springframework.security', name: 'spring-security-taglibs', version: spring_security_version compile group: 'org.springframework.security', name: 'spring-security-test', version: spring_security_version compile group: 'org.springframework.hateoas', name: 'spring-hateoas', version : spring_hateoas_version compile group: 'org.jasypt', name: 'jasypt', version: jasypt_version compile group: 'org.jasypt', name: 'jasypt-spring31', version: jasypt_spring31_version compile group: 'org.jasypt', name: 'jasypt-springsecurity3', version: jasypt_springsecurity3_version compile group: 'org.apache.tiles', name: 'tiles-core', version: tiles_version compile group: 'org.apache.tiles', name: 'tiles-api', version: tiles_version compile group: 'org.apache.tiles', name: 'tiles-jsp', version: tiles_version compile group: 'javax.servlet', name: 'jstl', version: jstl_version compile group : 'org.codehaus.janino', name : 'janino', version : janino_version compile group: 'javax.inject', name: 'javax.inject', version: javax_inject_version /*compile group: 'org.flywaydb', name: 'flyway-core', version: flyway_version*/ /*compile group: 'org.hibernate', name: 'hibernate-envers', version: hibernate_envers_version*/ compile group: 'org.apache.commons', name : 'commons-lang3', version: commons_lang3_version compile group: 'commons-fileupload', name : 'commons-fileupload', version: commons_fileupload_version compile group: 'org.apache.poi', name : 'poi', version: apache_poi_version providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: servlet_api_version runtime('mysql:mysql-connector-java') optional group: 'org.springframework.boot', name:'spring-boot-configuration-processor', version: spring_boot_version /****************************************************************************/ /****************** Testing dependencies start below ************************/ /****************************************************************************/ testCompile group: 'org.springframework.boot', name:'spring-boot-starter-test' testCompile group: 'org.assertj', name: 'assertj-core', version: assertj_version testCompile group: 'com.natpryce', name: 'make-it-easy', version: make_it_easy_version testCompile group: 'com.ninja-squad', name: 'DbSetup', version: db_setup_version } compileJava.dependsOn(processResources) eclipse { classpath { containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER') containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7' } } task wrapper(type: Wrapper) { gradleVersion = '2.10' } 

Below is my error.jsp :

 <%@ include file="common/taglibs.jsp"%> System has encountered an error. Please contact your system administrator. How to solve this issue? 
+5
source share
2 answers

Traditional deployment

If you are not using the built-in servlet container, just disable the white shortcut by adding it to your application.properties :

 server.error.whitelabel.enabled = false 

Embedded Tomcat Script

Add tomcat-embed-jasper as your dependency:

 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> 

And name your controller as error :

 @Controller("error") public class AppErrorController implements ErrorController { ... } 

Or you can disable the white label instead of renaming the bean:

 server.error.whitelabel.enabled = false 

Why does the name matter?

After a little digging in the automatic configuration of ErrorMvcAutoConfiguration , I came across the following configuration:

 @Configuration @ConditionalOnProperty(prefix = "server.error.whitelabel", name = "enabled", matchIfMissing = true) @Conditional(ErrorTemplateMissingCondition.class) protected static class WhitelabelErrorViewConfiguration { private final SpelView defaultErrorView = new SpelView( "<html><body><h1>Whitelabel Error Page</h1>" + "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>" + "<div id='created'>${timestamp}</div>" + "<div>There was an unexpected error (type=${error}, status=${status}).</div>" + "<div>${message}</div></body></html>"); @Bean(name = "error") @ConditionalOnMissingBean(name = "error") public View defaultErrorView() { return this.defaultErrorView; } // rest of the configuration } 

This timestamp issue is related to defaultErrorView type SpelView . Therefore, if you register another bean named error :

 @ConditionalOnMissingBean(name = "error") public View defaultErrorView() { ... } 

Or disable the white label:

 @ConditionalOnProperty(prefix = "server.error.whitelabel", name = "enabled", matchIfMissing = true) 

This submission will not be registered and you will avoid this strange exception.

How about a Jasper dependency?

There is a JspTemplateAvailabilityProvider that provides accessibility information for JSP view templates. This class has an isTemplateAvailable method that looks like this:

 public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader, ResourceLoader resourceLoader) { if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", classLoader)) { String prefix = getProperty(environment, "spring.mvc.view.prefix", "spring.view.prefix", WebMvcAutoConfiguration.DEFAULT_PREFIX); String suffix = getProperty(environment, "spring.mvc.view.suffix", "spring.view.suffix", WebMvcAutoConfiguration.DEFAULT_SUFFIX); return resourceLoader.getResource(prefix + view + suffix).exists(); } return false; } 

So, if org.apache.jasper.compiler.JspConfig not present in the classpath, it will not display the jsp view, so we added the required dependency to it, which is tomcat-embed-jasper .

There may be a better and less hacky way for this problem, but this is the solution I came across, and this is what it is!

+20
source

You had many ways to deal with spring boot error. If you read the documentation, the white paper will say that the best thing I used in my projects was to develop a controller to manage the exception, and then to set up my tomcat's error page if you use tomcat, but the method was the same for another container, I I inform the sample configuration:

Container configuration

:

 public class MyApplication { public static void main(String[] args) { SpringApplication.run(UserDocumentLibraryClientApplication.class, args); } ... @Bean public EmbeddedServletContainerCustomizer exceptionHandling() { return container -> container.addErrorPages(new ErrorPage("/exception")); } } 

controller:

 @Controller public class ExceptionController { @Autowired private MessageSource messageSource; public void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } @RequestMapping("/exception") public String exception(Model model,Exception ex,Locale locale,HttpServletRequest httpRequest,HttpServletResponse httpResponse){ ex.printStackTrace(); model.addAttribute("templatePath", "exception/exception"); model.addAttribute("template", "content"); try{ model.addAttribute("exceptionMessage",messageSource.getMessage(String.format("exception.body.%s",httpResponse.getStatus()),new Object[]{},locale)); } catch (NoSuchMessageException e){ model.addAttribute("exceptionMessage",messageSource.getMessage("exception.body",new Object[]{},locale)); } return "index"; } } 

application.properties

 ... server.error.whitelabel.enabled=false ... 

the index can be your thimeleaf template and use the same template for your application.

Of course, this is just an example, but even in the documentation you can read that if you want a fine grain configuration option, these are good options.

I hope this helps you

0
source

Source: https://habr.com/ru/post/1244709/


All Articles