package com.nbtconsulting.demo.restws.v2007.web; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; import org.springframework.web.servlet.mvc.AbstractController; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; //--------------------------------------------------------- //--------------------------------------------------------- /** A kind of do nothing base Spring REST web service controller. It directs the input request to the various java method associated with the input http method.
i.e.
doDelete for DELETE
doGet for GET
doHead for HEAD
doOptions for OPTIONS
doPost for POST
doPut for PUT
doTrace for TRACE
etc.

The flow of the response could be similar to the following:

dao Layer -> service layer -> controller -> use xstream -> forwards to custom view -> XML response


The supported methods are currently set to:

List listSupportedHttpMethods =
	[
	"GET",
	"POST",
	"PUT",
	"DELETE"
	]

setSupportedMethods(listSupportedHttpMethods as String[])


ModelAndView mav = null
switch (request.getMethod())
	{
	case "DELETE":
		mav = doDelete(request, response)
		break;
	case "GET":
		mav = doGet(request, response)
		break;
	case "HEAD":
		mav = doHead(request, response)
		break;
	case "OPTIONS":
		mav = doOptions(request, response)
		break;
	case "POST":
		mav = doPost(request, response)
		break;
	case "PUT":
		mav = doPut(request, response)
		break;
	case "TRACE":
		mav = doTrace(request, response)
		break;

	default:
		mav = doNothing(request, response)
		break;
	}

return mav
*/ public class BasicSpringRestController extends AbstractController { protected static org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory.getLog(BasicSpringRestController.class); // following METHOD_* constants are not currently provided by Spring Framework; // however, METHOD_GET and METHOD_POST are provided by Spring Framework public static final String METHOD_PUT = "PUT"; public static final String METHOD_DELETE = "DELETE"; public static final String METHOD_HEAD = "HEAD"; public static final String METHOD_OPTIONS = "OPTIONS"; public static final String METHOD_TRACE = "TRACE"; protected View textView; protected View xhtmlView; protected View xmlView; //--------------------------------------------------------- public BasicSpringRestController() { super(); logger.debug("entered"); String[] strarraySupportedHttpMethods = { METHOD_GET, METHOD_POST, METHOD_PUT, METHOD_DELETE, METHOD_HEAD, METHOD_OPTIONS, METHOD_TRACE, }; setSupportedMethods(strarraySupportedHttpMethods); } //--------------------------------------------------------- /** Primary "do work" method called when a request is made on the web service. */ public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { logger.debug("entered"); logger.debug("supportedMethods: ${this.supportedMethods}"); ModelAndView mav = null; String strRequestHttpMethod = request.getMethod(); logger.debug("strRequestHttpMethod: " + strRequestHttpMethod); if (METHOD_GET.equalsIgnoreCase(strRequestHttpMethod)) { mav = doGet(request, response); } else if (METHOD_PUT.equalsIgnoreCase(strRequestHttpMethod)) { mav = doPut(request, response); } else if (METHOD_POST.equalsIgnoreCase(strRequestHttpMethod)) { mav = doPost(request, response); } else if (METHOD_DELETE.equalsIgnoreCase(strRequestHttpMethod)) { mav = doDelete(request, response); } else if (METHOD_HEAD.equalsIgnoreCase(strRequestHttpMethod)) { mav = doHead(request, response); } else if (METHOD_OPTIONS.equalsIgnoreCase(strRequestHttpMethod)) { mav = doOptions(request, response); } else if (METHOD_TRACE.equalsIgnoreCase(strRequestHttpMethod)) { mav = doTrace(request, response); } else { //default: //mav = doNothing(request, response); } return mav; } //--------------------------------------------------------- /** If present, get the "username" paramater from the URL path. @return null if username parameter is not present on the URL path, else returns the username value from the URL path. */ public String getUserNameFromUrlIfPresent(HttpServletRequest request) { String strIdReturn = null; Map mapRestParams = (Map) request.getAttribute( "ParameterizedUrlHandlerMapping.path-parameters"); if (mapRestParams == null) { return null; } strIdReturn = (String) mapRestParams.get("username"); return strIdReturn; } //--------------------------------------------------------- /** If present, get the "name" paramater from the URL path. @return null if name parameter is not present on the URL path, else returns the name value from the URL path. */ public String getNameFromUrlIfPresent(HttpServletRequest request) { String strIdReturn = null; Map mapRestParams = (Map) request.getAttribute( "ParameterizedUrlHandlerMapping.path-parameters"); if (mapRestParams == null) { return null; } strIdReturn = (String) mapRestParams.get("name"); return strIdReturn; } //--------------------------------------------------------- /** If present, get the "id" paramater from the URL path. @return null if id parameter is not present on the URL path, else returns the id value from the URL path. */ public String getIdFromUrlIfPresent(HttpServletRequest request) { String strIdReturn = null; Map mapRestParams = (Map) request.getAttribute( "ParameterizedUrlHandlerMapping.path-parameters"); if (mapRestParams == null) { return null; } strIdReturn = (String) mapRestParams.get("id"); return strIdReturn; } //--------------------------------------------------------- public Boolean isStringPresentInRequestURI(HttpServletRequest request, String str) { String strURI = request.getRequestURI(); if (strURI == null) { return false; } if (strURI.lastIndexOf(str) > 0) { return true; } else { return false; } } //--------------------------------------------------------- public ModelAndView doNothing(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doDelete(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doGet(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doHead(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doOptions(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doPost(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doPut(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public ModelAndView doTrace(HttpServletRequest request, HttpServletResponse response) { ModelAndView mav = new ModelAndView(textView); return mav; } //--------------------------------------------------------- public View getTextView() { return textView; } //--------------------------------------------------------- public void setTextView(View textView) { this.textView = textView; } //--------------------------------------------------------- public View getXhtmlView() { return xhtmlView; } //--------------------------------------------------------- public void setXhtmlView(View xhtmlView) { this.xhtmlView = xhtmlView; } //--------------------------------------------------------- public View getXmlView() { return xmlView; } //--------------------------------------------------------- public void setXmlView(View xmlView) { this.xmlView = xmlView; } }