SpringMVC-10-Spring REST 风格

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 SpringMVC-10-Spring REST 风格,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

3.Spring REST 风格

  • restful是一个资源定位及资源操作风格。不是标准也不是协议。采用这个风格设计的软件可以简洁,有层次,可以实现缓存机制

  • 资源:互联网所有事物可以抽象为资源

  • Spring REST 风格可以简单理解为:使用 URL 表示资源时,每个资源都用一个独一无二的 URL 来表示,并使用 HTTP 方法表示操作,即准确描述服务器对资源的处理动作(GET、POST、PUT、DELETE),实现资源的增删改查。

  • GET:表示获取资源
  • POST:表示新建资源
  • PUT:表示更新资源
  • DELETE:表示删除资源
  • 下面举例说明 REST 风格的 URL 与传统 URL 的区别。

新增 POST /addOperation??id=1 VS /user/1
查询 get /queryOperation?id=1 VS /user/1
更新 POST /modifyOperation?id=1 VS /user/1

删除 get/post /deleteOperation?id=12 VS /user/1

  • 传统 URL通过不同参数来实现不同的效果。方法单一,只能使用post和get请求方式

  • REST 风格: URL 中最明显的就是参数不再使用“?”传递。通过不同的请求方式实现不同的效果。如上面所示:请求地址一样。但是功能缺不同

  • 这种风格的 URL 可读性更好,使得项目架构清晰,最关键的是 Spring MVC 也提供对这种风格的支持。达到URL的一个复用

简洁

高效:缓存

安全:隐藏了参数名

  • 但也存在问题:中文乱码的情况

请求方式:链接的请求是get方式;表单提交的是post方式

  • @PostMapping(“/login6/{username}/{pwd}”)注解作为method = RequestMethod.POST请求方式的衍生,作为其快捷方式。
/**
* path =和value = 一样起路径映射作用,可以用@PathVariable注解
* name起路径映射作用,但不可以用@PathVariable注解
 * * HTTP Status 405 – Method Not Allowed请求方式不同报错
 * 还可以用@PostMapping("/login6/{username}/{pwd}")注解作为请求方式的衍生
* */
//@RequestMapping(value = "/login6/{username}/{pwd}",method = RequestMethod.POST)
@PostMapping("/login6/{username}/{pwd}")
public String login6(@PathVariable("username") String username, @PathVariable("pwd") String pwd,Model model){
    if ("zs".equals(username)&&"123456".equals(pwd)){
        model.addAttribute("msg","6登录ok");
    }else {
        model.addAttribute("msg","6登录false");
    }
    return "result";
}
  • 需要注意的是:由于 HTTP 不支持 PUT 和 DELETE 请求,所以需要将 DELETE 和 PUT 请求转换成 POST 请求,在 web.xml 中配置过滤器 HiddenHttpMethodFilter。
<!-- 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>
  • 控制器方法设置请求方式
@RequestMapping(value = "/login7/{username}/{pwd}",method = RequestMethod.PUT)
public String login7(@PathVariable("username") String username, @PathVariable("pwd") String pwd,Model model){
    if ("zs".equals(username)&&"123456".equals(pwd)){
        model.addAttribute("msg","7登录ok");
    }else {
        model.addAttribute("msg","7登录false");
    }
    return "result";
}
@RequestMapping(value = "/login8/{username}/{pwd}",method = RequestMethod.DELETE)
public String login8(@PathVariable("username") String username, @PathVariable("pwd") String pwd,Model model){
    if ("zs".equals(username)&&"123456".equals(pwd)){
        model.addAttribute("msg","8登录ok");
    }else {
        model.addAttribute("msg","8登录false");
    }
    return "result";
}
  • 页面设置隐藏域
<!-- 发送PUT和DELETE请求时,需要添加一个隐藏域 -->
<h4>发送PUT请求</h4>
<form action="/user/login7/zs/123456" method="post">
  <input type="hidden" name="_method" value="PUT" />
  <input type="submit" value="PUT" />
</form>
<h4>发送DELETE请求</h4>
<form action="/user/login8/zs/123456" method="post">
  <input type="hidden" name="_method" value="DELETE" />
  <input type="submit" value="DELETE" />
</form>

下一篇:SpringMVC-11-重定向和转发

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123892.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!