简介
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 代码
编写页面
hiddenhttpmethodfilter
org.springframework.web.filter.hiddenhttpmethodfilter
hiddenhttpmethodfilter
/*
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;
}
}
pageencoding="utf-8"%>
rest testtest rest get
type="submit" value="submit">
type="submit" value="submit">
注:handler 中 @requestparam 注解必须加上 required 参数,否则访问页面会出现400错误。
总结
以上就是本文关于springmvc rest风格介绍及实现代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
如有不足之处,欢迎留言指出。
希望与广大网友互动??
点此进行留言吧!