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