SpringBoot 默认集成了 jackson
REST就是Representational State Transfer的缩写呀,翻译为中文就是‘表述性状态转移(鬼看得懂啊)
RestFul就是一个规范
RESTful Web 服务与传统的 MVC 开发一个关键区别是返回给客户端的内容的创建方式:
传统的 MVC 模式开发会直接返回给**客户端一个视图**,
但是 RESTful Web 服务一般会将返回的数据以 **JSON 的形式返回**,这也就是现在所推崇的前后端分离开发。@RestController
将返回的对象数据直接以 JSON(主要的方式) 或 XML 形式写入 HTTP 响应(Response)中。
- 单独使用 `@Controller` 不加 `@ResponseBody`的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。
- 但`@RestController`只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
<br />
<br />
@RequestMapping
:上面的示例中没有指定 GET 与 PUT、POST 等,因为@RequestMapping
**默认映射所有HTTP Action**,你可以使用@RequestMapping(method=ActionType)
来缩小这个映射。
@PostMapping
实际上就等价于 @RequestMapping(method = RequestMethod.POST)
,同样的 @DeleteMapping
,@GetMapping
也都一样,常用的 HTTP Action 都有一个这种形式的注解所对应。
@RequestBody
:可以将 HttpRequest body 中的 JSON 类型数据反序列化为合适的 Java 类型**。(和这个一起看) (自动 反序列化 . 牛批把)**
@PostMapping("/book")
public ResponseEntity<List<Book>> addBook(@RequestBody Book book) {
books.add(book);
return ResponseEntity.ok(books);
}
@PathVariable
:取url地址中的参数。@RequestParam
url的查询参数值。
给你一个范例
@DeleteMapping("/book/{id}")
public ResponseEntity deleteBookById(@PathVariable("id") int id) {
books.remove(id);
return ResponseEntity.ok(books);
}
ResponseEntity
: 表示整个HTTP Response:状态码,标头和正文内容。我们可以使用它来自定义HTTP Response 的内容。
@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;