Spring MVC is a powerfull Java application framework to create web applications for Java. In this example we’ll learn how to handle exception in Spring MVC and then based on that how to show a different view to user
Exception Handling Example 1
Spring mvc can handle all exception within a controller with the following annotation
@ExceptionHandler(Exception.class)
@Controller
public class HelloWorldController {
@ExceptionHandler(Exception.class)
public ModelAndView handleMyException(Exception exception) {
ModelAndView mv = new ModelAndView("redirect:errorMessage.html?error=" + exception.getMessage());
return mv;
}
@RequestMapping(value = "/errorMessage", method = RequestMethod.GET)
public ModelAndView handleMyExceptionOnRedirect(@RequestParam("error") String error) {
ModelAndView mv = new ModelAndView("uncaughtExceptionSpring");
mv.addObject("error", error);
return mv;
}
}So this means that when an exception will occur it will redirect to error page url and that url will display an error view
Exception Handling Example 2
You can also use SimpleMappingExceptionResolver it might be more useful in your case: you can just map each exception to each page and the default page.
Set this in spring config. file.
<bean class="com.imran.web.handler.CustomSimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Throwable">error</prop>
</props>
</property>
</bean>
Class
package com.imran.web.handler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
if(int a = 1)
return new ModelAndView("ViewName1");
else
return new ModelAndView("ViewName2"); }
}
}