SpringMVC之Restful风格

Spring MVC对Restful风格请求支持

  • 什么是RestfuI
    Restful是一种web软件架构风格,它不是标准也不是协议,它倡导的是一个资源定位及资源操作的风格。
  • Restful的优点
    结构清晰、符合标准、易于理解、扩展方便。
  • RestfuI的示例
    rest是一个url请求的风格,基于这种风格来请求的url,在没有rest风格的情况,原有的url设计如下:
    http://localhost:8080/user/queryUserByld.action?id=3
    有了rest风格之后,url设计如下:
    http://localhost:8080/user/3 //代表的是id为3的那个用户记录(资源)
    在rest中互联网内的所有东西都是资源,既然是资源就会有一个唯一的URI(统一资源定位符) 标识它,代表它。
    URI:统一资源定位符,每个资源独一无二的识别符,通过URI地址去定位互联网中的资源(抽象的概念,比如图片、视频、app服务等)。
    RestfuI风格URL:互联网所有的事物都是资源,要求URL中只有表示资源的名称,没有动词。
    RestfuI风格资源操作:锁定资源之后如何操作它呢?常规操作就是增删改查,根据请求方式不同,代表要做不同的操作。即使用HTTP请求中的method方法PUT(更新)、DELETE(删除)、POST(新建)、GET(查询)来操作资源。
    RestfuI风格资源表述:可以根据需求对URL定位的资源返回不同的表述(也就是返回数据类型,比如XML, JSON等数据格式)。
    Spring MVC支持RestfuI风格请求,具体就是使用**@PathVariable**注解获取RestfuI风格的请求URL中的路径变量。
    示例代码
//前端JSP页面
   <div>
        <h2>SpringMVC对Restful风格url的支持</h2>
        <fieldset>
            <p>测试用例:SpringMVC对Restful风格url的支持</p>
			<!-- get请求-->
            <a href="/demo/handle/15">rest_get测试</a>
			<!-- post请求-->
            <form method="post" action="/demo/handle">
                <input type="text" name="username"/>
                <input type="submit" value="提交rest_post请求"/>
            </form>
			<!-- put请求,使用隐藏域来标识资源的操作符-->
            <form method="post" action="/demo/handle/15/lisi">
                <input type="hidden" name="_method" value="put"/>
                <input type="submit" value="提交rest_put请求"/>
            </form>
			<!-- delete请求-->
            <form method="post" action="/demo/handle/15">
                <input type="hidden" name="_method" value="delete"/>
                <input type="submit" value="提交rest_delete请求"/>
            </form>
        </fieldset>
    </div>

后端Handler

@Controller
@RequestMapping("/demo")
public class DemoController  {
    /*
     * restful  get   /demo/handle/15
     * 和delete的url完全相同,靠的就是method = {RequestMethod.GET}来区分请求方式
     */
    @RequestMapping(value = "/handle/{id}",method = {RequestMethod.GET})
    //@PathVariable("id")注解用于从URI中获取参数
    public ModelAndView handleGet(@PathVariable("id") Integer id) {
           System.out.println(id);
    }

    /*
     * restful  post  /demo/handle
     */
    @RequestMapping(value = "/handle",method = {RequestMethod.POST})
    public ModelAndView handlePost(String username) {
           System.out.println(username);
    }

    /*
     * restful  put  /demo/handle/15/lisi
     * 要使用PUT必须配置请求过滤器来识别post请求中的_method属性
     */
    @RequestMapping(value = "/handle/{id}/{name}",method = {RequestMethod.PUT})
    //有几个参数就用几个@PathVariable注解标注即可
    public ModelAndView handlePut(@PathVariable("id") Integer id,@PathVariable("name") String username) {
           System.out.println("id" + id ",name"+name);
    }

    /*
     * restful  delete  /demo/handle/15
     * 要使用DELETE必须配置请求过滤器来识别post请求中的_method属性
     */
    @RequestMapping(value = "/handle/{id}",method = {RequestMethod.DELETE})
    public ModelAndView handleDelete(@PathVariable("id") Integer id) {
		   System.out.println(id);
    }
}

web.xml中配置请求方式过滤器(将特定的post请求转换为put和delete请求)

  <!--配置springmvc请求方式转换过滤器,会检查请求参数中是否有_method参数,如果有就按照指定的请求方式进行转换-->
  <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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值