Tuesday, 4 December 2018

Spring mvc: Exception handling at application level

In my previous post, I explained how to handle the exceptions at controller level. One problem with this approach is, the exception handling mechanism is tied to the controller and it can't be used by other controllers.

In this post, I am going to show you how to handle exceptions that are applicable for all the controllers.

Follow below steps.

a. Create a class and annotate it with @ControllerAdvice annotation
@ControllerAdvice
public class GlobalExceptionHandler {

}

b. Add all the exception handling methods to GlobalExceptionHandler class.
@ControllerAdvice
public class GlobalExceptionHandler {

         @ExceptionHandler(RuntimeException.class)
         public String handleRuntimeException() {
                  return "runtimeException";
         }
}

Find the below working application.

HelloWorldController.java
package com.sample.myApp.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

 @RequestMapping("/welcome")
 public String getHelloMessage() {
  boolean flag = true;

  if (flag) {
   throw new RuntimeException("Throwning blindly");
  }

  return "welcome";
 }

}


GlobalExceptionHandler.java
package com.sample.myApp.exceptionHandlers;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {

 @ExceptionHandler(RuntimeException.class)
 public String handleRuntimeException() {
  return "runtimeException";
 }
}

Create runTimeException.jsp, welcome.jsp files under WEB-INF/jsp folder.


runTimeException.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
 <h1>Run time exception occured. Please contact the Administrator.
 </h1>
</body>
</html>

welcome.jsp
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello World Spring Web MVC</title>
</head>
<body>
 <h1>
  Hello, Good Morning
 </h1>
</body>
</html>

Create web.xml, HelloWorld-servlet.xml files under WEB-INF folder.


web.xml
<web-app id="WebApp_ID" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

 <display-name>Spring MVC Hello WorldApplication</display-name>

 <servlet>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>

HelloWorld-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

 <mvc:annotation-driven />

 <context:component-scan
  base-package="com.sample.myApp" />

 <bean
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>

</beans>

Create index.jsp file under webapp folder.


index.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Welcome Page</title>
</head>

<body>
 <h2>Click on below button to get welcome page</h2>
 <form method="post" action="/springdemo/welcome"
  id="form1">

  <input type="submit" value="getWelcomeMessage"
   style="font-size: 18px;" />
 </form>

</body>
</html>
Total project structure looks like below.
Run the application on server, you can able to see below kind of screen.

Click on the button ‘getWelcomeMessage’, you will be redirected to runtimeException.jsp.


Previous                                                 Next                                                 Home

No comments:

Post a Comment