SpringMVC——Restful风格

RestFul风格

概念

​ Restful就是一个资源定位及资源操作的风格,不是标准也不是协议。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

REST 的基本原理包括:

  • 系统上的一切对象都要抽象为资源;

  • 每个资源对应唯一的资源标识(URI);

  • 对资源的操作不能改变资源标识(URI)本身;

  • 所有的操作都是无状态的等等。

    【这里备注一下URL和URI】

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

使用Restful操作资源:可以通过不同的请求方式来实现不同的效果,如下,请求地址一样,但对应的业务可以是不同的!

学习测试

  1. 新建一个类RestFulController

    @Controller
    public class RestFulController{
        
    }
    
  2. 在SpringMVC中可以使用@PathVariable注解,让方法参数的值对应绑定到一个URL模板变量上。

    @Controller
    public class RestFulController {
        //映射访问路径
        @RequestMapping("/commit/{p1}/{p2}")
        public String index(@PathVariable int p1, @PathVariable int p2, Model model){
            
            int res = p1 + p2;
            
            //SpringMvc会自动实例化一个Model对象用于向视图传值
            model.addAttribute("msg","结果为"+res);
            
            //返回视图位置
            return "test";
        }
    }
    

    测试结果:

可以通过method约束请求的类型:

​ 可以指定请求的类型如GET、POST、PUT、DELETE等;

​ 测试,我们将method指定为POST:

//映射访问路径
@RequestMapping(value = "/commit/{p1}/{p2}",method = RequestMethod.POST)

​ 再次访问该映射时,会报405错误——Method Not Allowed:

​ 因为默认的请求方式为get,而该url约束了请求方式只能为POST;

​ 将POST修改为GET后则能正常访问:

//映射访问路径
@RequestMapping(value = "/commit/{p1}/{p2}",method = RequestMethod.GET)

​ 这样一来,即使是同一个请求地址,当HTTP请求方式不同时,可以对应不同的业务,如下

​ 对于同样的请求地址/book/id,GET请求方式是根据ID查询,而DELETE请求方式是根据ID删除:

//根据ID查询书籍
@GetMapping("/book/{id}")
public String toUpdateBook(@PathVariable Integer id, Model model){
    Books books = bookService.queryBookById(id);
    model.addAttribute("qBook",books);
    return "queryBook";
}


//根据ID删除书籍
@DeleteMapping("/book/{id}")
public String deleteBook(@PathVariable Integer id){
    System.out.println("deleteBookId=>"+id);
    bookService.deleteBook(id);
    return "redirect:/books/allBooks";
}

小结:

​ SpringMVC的@RestMapping注解能够处理HTTP请求的方法,如GET、POST、PUT、DELETE以及PATCH;

​ 所有的地址栏请求默认都会是HTTP GET

​ 方法级别的注解变体有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping

​ @GetMapping是一个组合注解

​ 它代表的是@RequestMapping(method = RequestMethod.GET)的组合

posted @ 2020-08-13 00:00  想拥有两颗❤  阅读(165)  评论(0编辑  收藏  举报