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());