SpringInAction 六七章总结

第六章 创建REST服务

创建Restful服务,那么前端框架可以使用Angular、React、Vue.js等适合自己的前端技术。

Angular参考书籍 Jeremy Wilken编写的《Angular in Action》以及Yakov Fain和Anton Moiseev编写的《Angular Development with TypeScript, Second Edition》

Spring为不同的Http请求提供了注解

注解 Http方法 典型用途
@GetMapping Http GET请求 读取资源
@PostMapping Http POST请求 创建资源
@PutMapping Http PUT请求 更新资源
@GetMapping Http PATCH请求 更新资源(局部)
@DeleteMapping Http DELETE请求 删除资源
@RequestMapping 通用的请求处理

6.1 RestFul控制器

@RestController

Controller + ResponseBody 该控制器所有的返回是json形式

@RequestMapping(produces = "application/json")

声明该处理器只处理Accept头信息包含“application/json”的请求

@CrossOrigin(origins = "*")

由于前段与API可能会运行在独立的主机或端口上,Web浏览器会阻止客户端消费API。
@CrossOrigin允许来自任何域的客户端消费该API

6.1.2 发送服务器到服务器端

正常情况下,HTTP成功返回状态码是200。有时想使返回的HTTP更具有描述性,可以知道返回的状态码。例如201代表创建了一个资源

@ResponseStatus(HttpStatus.CREATED)
@ResponseStatus(code = HttpStatus.NO_CONTENT)   //确保只响应204,不返回任何资源【delete使用】

6.2-6.3内容为超媒体相关

6.4 总结

  • REST端点可以通过SpringMVC来创建
  • 将数据写入响应体可以通过@ReponseBody或ResponseEntity对象实现
  • RestController = RequestMapping + ResponseBody

第七章 消费REST服务

Spring消费REST API的几种方式

  • RestTemplate: Spring核心框架通过,简单、同步REST客户端【本章重点】
  • Traverson: Spring HATEOAS提供,同步的REST客户端
  • WebCline: Spring5引入,反应式、异步REST客户端

GET资源

  • getForObject(URL, 返回类型, 参数列表...)
rest.getForObject("http://localhost:8080/ingredients/{id}", Ingredient.class, ingredientId);

如果参数过多,可以封装到Map中,传入第三个参数

  • getForEntity。使用方法类似,区别是返回的是ResponseEntity对象,包含响应细节,例如响应头信息

PUT资源

rest.put("http://localhost:8080/ingredients/{id}", ingredient, ingredient.getId());

POST资源

rest.postForObject("http://localhost:8080/ingredients", ingredient, Ingredient.class);

DELETE请求

rest.delete("http://localhost:8080/ingredients/{id}", ingredient.getId());
posted @ 2020-07-18 17:10  浮梦  阅读(152)  评论(0编辑  收藏  举报