REST风格下的SpringMVC简单响应方法
学习中,如有错误请见谅

项目结构

ServletContainersInitConfig
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[0]; } protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; }
//设置由springmvc控制器处理的请求映射路径 protected String[] getServletMappings() { return new String[]{"/"}; } //乱码处理 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); return new Filter[]{filter}; } }
SpringMvcConfig
@Configuration @ComponentScan("com.itheima.controller")
//开启json数据类型自动转换 @EnableWebMvc public class SpringMvcConfig { }
BookController
//@Controller //@ResponseBody配置在类上可以简化配置,表示设置当前每个方法的返回值都作为响应体 //@ResponseBody @RestController //使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
//@RequestMapping注解⽤到类级别的时候,它能够指定该控制器所处理的请 求类型。在本例中,它规定BookController 将会处理路径 以“/books”开头的请求。
@RequestMapping("/books") public class BookController { // @RequestMapping( method = RequestMethod.POST) @PostMapping //使用@PostMapping代替@RequestMapping( method = RequestMethod.POST),效果相同 public String save(@RequestBody Book book){ System.out.println("book save..." + book); return "{'module':'book save'}"; } // @RequestMapping(value = "/{id}" ,method = RequestMethod.DELETE) @DeleteMapping("/{id}") //使用@DeleteMapping简化DELETE请求方法对应的映射配置 public String delete(@PathVariable Integer id){ System.out.println("book delete..." + id); return "{'module':'book delete'}"; } // @RequestMapping(method = RequestMethod.PUT) @PutMapping //使用@PutMapping简化Put请求方法对应的映射配置 public String update(@RequestBody Book book){ System.out.println("book update..."+book); return "{'module':'book update'}"; } // @RequestMapping(value = "/{id}" ,method = RequestMethod.GET) @GetMapping("/{id}") //使用@GetMapping简化GET请求方法对应的映射配置 public String getById(@PathVariable Integer id){ System.out.println("book getById..."+id); return "{'module':'book getById'}"; } // @RequestMapping(method = RequestMethod.GET) @GetMapping //使用@GetMapping简化GET请求方法对应的映射配置 public String getAll(){ System.out.println("book getAll..."); return "{'module':'book getAll'}"; } }
如果不简化操作的代码格式:
//设置当前请求方法为POST,表示REST风格中的添加操作 //method表示设置请求动作 //method = RequestMethod.POST表示当用POST访问http://localhost/users的时候进入该方法 @RequestMapping(value = "/users",method = RequestMethod.POST) @ResponseBody public String save(){ System.out.println("user save..."); return "{'module':'user save'}"; }
测试结果

三种接受参数的辨析
@RequestBody @RequestParam @PathVariable
区别
@RequestParam用于接收url地址传参或表单传参
@RequestBody用于接收json数据
@PathVariable用于接收路径参数,使用{参数名称}描述路径参数
应用
后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
如果发送非json格式数据,选用@RequestParam接收请求参数
采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
了解更多:
代码来源:itheima

浙公网安备 33010602011771号