I am trying to handle custom exception handling using Spring MVC. DAO layer exception handler by service layer and service layer wrap that exception and handle that exception by Controller exception handler by Spring MVC. Following is my code:
@Override
public void saveNewMachineDetails(Machine machine, Configurations configurations) throws DataNotPersist{
logger.info("call service saveNewMachineDetails method");
try{
machineRepository.saveAndFlush(machine);
}catch(Exception ex){
// logger.error(ex.getMessage());
DataNotPersist dataNotPersist = new DataNotPersist(messageSource.getMessage("code.object.notpersist", null, null),
messageSource.getMessage("msg.object.notpersist", new Object[]{"Machine"}, null), ex);
throw dataNotPersist;
}}
In the above code the DAO layer exception handle at service layer and wrap that exception in custom exception and throw that exception.
In web layer i have configure Exception handler for handling exception, but when the exception is throw, the handler not catch the exception, i think because of i am unable to wrap actual exception with custom exception. Following is my exception handler code:
@ControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = DataNotPersist.class)
public ModelAndView defaultExceptionHandler(HttpServletRequest request, DataNotPersist ex)throws Exception {
logger.info("In GlobalExceptionHandler");
logger.debug("********* : "+ex.getMessage());
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exception", ex);
modelAndView.addObject("url", request.getRequestURL());
modelAndView.setViewName("common/error");
return modelAndView;
}}