Web.xml
We need to add the HiddenHttpMethodFilter to our web.xml. It searches HTML form PUTs for a _method parameter. If the corresponding value is GET, PUT, POST or DELETE, the call is transformed into a REST call before it is transmitted to the controllers:... <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>hiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>hiddenHttpMethodFilter</filter-name> <servlet-name>MyServlet</servlet-name> </filter-mapping> ...
Main Page
We replace the buttons by HTML post forms:<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;" charset=UTF-8"> <title>Welcome To REST With HTML Only !!!</title> </head> <body> <h1>Welcome To REST With HTML Only !!!</h1> <form action="<c:url value='/MyData/123466/'/>" method="post" > <input type="hidden" name="_method" value="GET"> <input type="submit" value="GET"> </form> <form action="<c:url value='/MyData'/>" method="post" > <input type="hidden" name="time" value="555555"> <input type="hidden" name="message" value="User PUT call !!!"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="PUT"> </form> <form action="<c:url value='/MyData'/>" method="post" > <input type="submit" value="POST"> </form> <form action="<c:url value='/MyData/654321'/>" method="post" > <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="DELETE"> </form> </body> </html>
Controller
We need to modify our controller for PUT calls:@Controller @RequestMapping(value = "/MyData") public class MyRESTController { @RequestMapping(value="/{time}", method = RequestMethod.GET) public @ResponseBody MyData getMyData( @PathVariable long time) { return new MyData(time, "REST GET Call !!!"); } @RequestMapping(method = RequestMethod.PUT) public @ResponseBody MyData putMyData( @RequestParam("time") long time, @RequestParam("message") String message) { return new MyData(time, message); } @RequestMapping(method = RequestMethod.POST) public @ResponseBody MyData postMyData() { return new MyData( System.currentTimeMillis(), "REST POST Call !!!"); } @RequestMapping(value="/{time}", method = RequestMethod.DELETE) public @ResponseBody MyData deleteMyData( @PathVariable long time) { return new MyData(time, "REST DELETE Call !!!"); } }
Running The Example
Once compiled, the example can be run with mvn tomcat:run. Then, browse:http://localhost:8585/spring-rest-with-html-only
The main page will be displayed:
If you click on a button, the corresponding JSON will be displayed:
More Spring related posts here.
No comments:
Post a Comment