package org.mifos.platform.rest.ui.controller;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.Ordered;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;
/**
* Intercept missing request parameter exception handler for REST methods
*/
public class RESTDefaultHandlerExceptionResolver extends AbstractHandlerExceptionResolver {
public RESTDefaultHandlerExceptionResolver() {
setOrder(Ordered.HIGHEST_PRECEDENCE);
}
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
try {
if (ex instanceof MissingServletRequestParameterException) {
return handleMissingServletRequestParameter((MissingServletRequestParameterException) ex, request,
response, handler);
}
} catch (Exception handlerException) {
logger.warn("Handling of [" + ex.getClass().getName() + "] resulted in Exception", handlerException);
}
return null;
}
protected @ResponseBody ModelAndView handleMissingServletRequestParameter(MissingServletRequestParameterException ex,
HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
if (request.getRequestURI().endsWith(".json")) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("status", "error");
modelAndView.addObject("cause", ex.getMessage());
return modelAndView;
}
return null;
}
}