3

I have a spring boot web application,which I am deploying as a war file in tomcat. I do not want the user to be displyed the white-label error page. I have progressed a bit on this, but need to re-direct the same to error page.

The below code is /error white-label error page is custom error message. But i want it to be re-directed to a error.jsp or error.html available under the template folder in resources of my web application. I tried changing the @RestController to @Controller with no luck.

import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomErrorController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error() {
        return "Unexpected error has happened.Please contact administrator!!!";
    }

    @Override
    public String getErrorPath() {
        System.out.println("-- Error Page GET --");
            return "error";
    }

}

Dependency

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>4.0.1.RELEASE</version>
    <exclusions>
        <exclusion>
            <artifactId>spring-aop</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>
<!-- Provided (for embedded war support) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>1.2.3.RELEASE</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4</version>
</dependency>
Manu
  • 1,379
  • 6
  • 24
  • 53

2 Answers2

7

Turn off whitelabel error pages in application.properties

server.error.whitelabel.enabled=false

See also Spring Boot Docs

Jakub Pomykała
  • 2,082
  • 3
  • 27
  • 58
  • 8
    This will redirect to serverlet error page.Its's not re-directing to custom error page – Manu Jun 12 '16 at 08:25
2

You can write your own exception handler in Spring and redirect to the error page

Below one is to handler the Exception and its sub classes

@ExceptionHandler(Exception.class)
public ModelAndView globalExceptionHandler(Exception e) {
    ModelAndView modelAndView = new ModelAndView("error");
    modelAndView.addObject("message", e.getMessage());
    return modelAndView;
}

You can write any number of exception handlers in controller, also narrow the exception you need in handlers, return appropriate error page.

Have a look at the documentation

Saravana
  • 12,647
  • 2
  • 39
  • 57