当前位置: 移动技术网 > IT编程>开发语言>Java > springmvc Rest风格介绍及实现代码示例

springmvc Rest风格介绍及实现代码示例

2019年07月19日  | 移动技术网IT编程  | 我要评论

简介

  rest 即 representational state transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用,post, delete, put, get 分别对应 crud。spring3.0 开始支持 rest 风格的请求,是通过 org.springframework.web.filter.hiddenhttpmethodfilter 把 post 请求转化为 put 和 delete 请求。本次实验采用的是 spring4.0 。

hiddenhttpmethodfilter 源码

public static final string default_method_param = "_method";
@override
  protected void dofilterinternal(httpservletrequest request, httpservletresponse response, filterchain filterchain)
      throws servletexception, ioexception {
	string paramvalue = request.getparameter(this.methodparam);
	if ("post".equals(request.getmethod()) && stringutils.haslength(paramvalue)) {
		string method = paramvalue.touppercase(locale.english);
		httpservletrequest wrapper = new httpmethodrequestwrapper(request, method);
		filterchain.dofilter(wrapper, response);
	} else {
		filterchain.dofilter(request, response);
	}
}

  从 hiddenhttpmethodfilter 的源码可以看出,spring 根据请求中的 _method 参数进行转化,因此如果想发起 rest 风格的 delete 或者 put 请求,只需要在表单中带上 _method 参数,并且把 _method 的值设置为 delete 或者 put(大写) 即可。详细例子如下:

在 web.xml 中配置 hiddenhttpmethodfilter
编写 handler 代码
编写页面

<!-- 配置 org.springframework.web.filter.hiddenhttpmethodfilter ,可以把 post 请求转化为 put 或者 delete 请求 -->
  <filter>
    <filter-name>hiddenhttpmethodfilter</filter-name>
    <filter-class>org.springframework.web.filter.hiddenhttpmethodfilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>hiddenhttpmethodfilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
package rex.springmvc.handlers;
import org.apache.log4j.logger;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.bind.annotation.requestparam;
@requestmapping(value="/resttest")
@controller
public class resttesthandler {
	private static final logger logger = logger.getlogger(resttesthandler.class);
	private static final string success = "success";
	@requestmapping(value="/restget/{id}", method=requestmethod.get)
	  public string restget(@requestparam(value="id", required=false) integer id){
		logger.debug("restget:" + id);
		return success;
	}
	@requestmapping(value="/restput/{id}", method=requestmethod.put)
	  public string restput(@requestparam(value="id", required=false) integer id){
		logger.debug("restput:" + id);
		return success;
	}
	@requestmapping(value="/restdelete/{id}", method=requestmethod.delete)
	  public string restdelete(@requestparam(value="id", required=false) integer id){
		logger.debug("restdelete:" + id);
		return success;
	}
	@requestmapping(value="/restpost", method=requestmethod.post)
	  public string restpost(){
		logger.debug("restpost");
		return success;
	}
}
<%@ page language="java" contenttype="text/html; charset=utf-8"
  pageencoding="utf-8"%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>rest test</title>
</head>
<body>
  <br>
  <br>
  <a href="resttest/restget/1" rel="external nofollow" >test rest get</a>

  <br>
  <br>
  <form action="resttest/restput/1" method="post">
    <input type="hidden" name="_method" value="put"> <input
      type="submit" value="submit">
  </form>

  <br>
  <br>
  <form action="resttest/restdelete/1" method="post">
    <input type="hidden" name="_method" value="delete"> <input
      type="submit" value="submit">
  </form>

  <br>
  <br>
  <form action="resttest/restpost" method="post">
    <input type="submit" value="submit">
  </form>
</body>
</html>

注:handler 中 @requestparam 注解必须加上 required 参数,否则访问页面会出现400错误。

总结

以上就是本文关于springmvc rest风格介绍及实现代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

springmvc入门实例

springmvc开发restful api之用户查询代码详解

springmvc使用multipartfile 实现异步上传方法介绍

如有不足之处,欢迎留言指出。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网