SpringMVC-10-Spring REST 风格

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
    org.springframework.web.filter.HiddenHttpMethodFilter


    hiddenHttpMethodFilter
    /*

  • 控制器方法设置请求方式
@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请求

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

你可能感兴趣的:(框架,spring,java,restful)