SpringMVC学习笔记三:REST风格

REST简介

表现形式状态转换

优点:

  • 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
  • 书写简化

按照REST风格访问资源时使用行为动作区分对资源进行了何种操作
http://localhost/users 查询全部用户信息GET(查询)
http://localhost/users/1 查询指定用户信息GET(查询)
http://localhost/users 添加用户信息POST(新增/保存)
http://localhost/users 修改用户信息PUT(修改/更新)
http://localhost/users/1 删除用户信息DELETE (删除)

  • 根据REST风格对资源进行访问称为RESTful
  • 上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范
  • 描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如: users、books、accounts...

实例

@Controller
public class BookController {
	@RequestMapping(value = "/books/{id}",method = RequestMethod.DELETE)
	@ResponseBody
	public String delete(@PathVariable String id){
		return "delete id = "+id;
	}
	@RequestMapping(value = "/books",method = RequestMethod.POST)
	@ResponseBody
	public String delete(){
		return "save ...";
	}
}

image

//简化方案
@RestController        //@Controller+@ResponseBody
@RequestMapping("/books")
public class BookController {
    //@RequestMapping(method = RequestMethod.DELETE)
    @DeleteMapping("/{id}")
    public String delete(@PathVariable String id){
        return "delete id = "+id;
    }
    //@RequestMapping(method = RequestMethod.POST)
    @PostMapping
    public String save(){
        return "save ...";
    }
}

image

知识点

image

image

@RequestBody @RequestParam @PathVariable 辨析

区别

  • @RequestParam用于接收url地址传参或表单传参@RequestBody用于接收json数据
  • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数

应用

  • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
  • 如果发送非json格式数据,选用@RequestParam接收请求参数
  • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

测试案例

@RestController        //@Controller+@ResponseBody
@RequestMapping("/books")
public class BookController {
    //@RequestMapping(method = RequestMethod.DELETE)
    private List<Book> books = new ArrayList<>();

    @DeleteMapping("/{id}")
    public String delete(@PathVariable String id){
        return "delete id = "+id;
    }
    //@RequestMapping(method = RequestMethod.POST)
    @PostMapping
    public String save(@RequestBody Book book){
        System.out.println(book);
        books.add(book);
        return "save success...";
    }

    @GetMapping
    public List<Book> getAll(){

        Book book1 = new Book();
        book1.setType("计算机");
        book1.setName("SpringMVC");
        book1.setDescription("基础");
        books.add(book1);
        Book book2 = new Book();
        book2.setType("计算机");
        book2.setName("SpringMVC");
        book2.setDescription("进阶");
        books.add(book2);
        return books;
    }
}

image

image

html等页面静态资源数据的放行

由于前面在使用过程中,设置servlet容器拦截一切访问请求

@Override
protected String[] getServletMappings() {
	return new String[]{"/"};
}

但此时我们不需要servlet捕获页面进行处理,因此在捕获过程中需要对一些捕获的页面进行放行

//新建一个配置类:用于配置servlet直接放行的静态资源
@Configuration
public class SpringMVCSupport extends WebMvcConfigurationSupport {
	@Override
	protected void addResourceHandlers(ResourceHandlerRegistry registry) {
		//放行webapp页面下的pages文件下的资源
		registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
		registry.addResourceHandler("/js/**").addResourceLocations("/js/");
		registry.addResourceHandler("/css/**").addResourceLocations("/css/");
		registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
	}
}
posted @ 2022-07-12 20:37  小懒虫LK  阅读(50)  评论(0编辑  收藏  举报