Spring Boot REST(一)核心接口

Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)

SpringBoot REST 系列相关的文章:

  1. SpringBoot REST(一)核心接口
  2. SpringBoot REST(二)源码分析

一、Spring 中与 REST 相关的注解

Spring 有以下相关的注解:

## 定义相关
|-- @Controller
|-- @RestController ## 映射相关
|-- @RequestMapping
|-- @GetMapping
|-- @PostMapping
|-- @PathVariable ## 请求相关
|-- @RequestBody
|-- @RequestParam
|-- @RequestHeader
|-- @CookieValue
|-- RequestEntity ## 定义相关
|-- @ResponseBody
|-- ResponseEntity

1.1 RestController

@RestController 相当于 @ResponseBody 和 @Controller 的组合。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default "";
}

使用如下,可以省略 @ResponseBody 注解:

@RestController
public class HelloController { @RequestMapping("/v1/test")
public String test1() {
return "test";
}
}

1.2 请求路径映射相关的注解

// @PathVariable 解析请求路径中的参数
@RequestMapping("/v1/{city_id}/{user_id}")
public String test2(@PathVariable("city_id") String cityId,
@PathVariable(value = "user_id") String userId) {
return cityId;
}

1.3 请求相关的注解

// 1. @RequestParam 请求的参数
@GetMapping("/v1/test4")
public String test4(@RequestParam(name = "user_id", defaultValue = "2") String userId) {
return userId;
} // 2. @RequestHeader 请求头中的参数
@GetMapping("/v1/get_header")
public String test6(@RequestHeader("access_token") String token) {
return token;
} // 3. @RequestBody 请求可能是 json 或 xml
@GetMapping("/v1/test5")
public String test5(@RequestBody User user) {
return user.getUsername();
}

1.4 响应相关的注解

没有使用 @RestController 情况下返回 json 等格式需要使用 @ResponseBody 注解

@RequestMapping("/v1/test")
@ResponseBody
public String test1() {
return "test";
}

1.5 RequestEntity 和 ResponseEntity

@GetMapping("/v1/entity")
public ResponseEntity<String> test8() {
return ResponseEntity.ok("hello, world!");
}

二、客户端 RestTemplate

经常需要发送一个 GET/POST 请求到其他系统(REST API),通过 JDK 自带的 HttpURLConnection、Apache HttpClient、Netty 4、OkHTTP 2/3 都可以实现。

HttpClient 的使用:http://rensanning.iteye.com/blog/1550436

RestTemplate 的使用:https://rensanning.iteye.com/blog/2362105

Spring 的 RestTemplate 封装了这些库的实现,使用起来更简洁。

RestTemplate 包含以下几个部分:

  1. HttpMessageConverter 对象转换器
  2. ClientHttpRequestFactory 默认是 JDK 的 HttpURLConnection
  3. ResponseErrorHandler 异常处理
  4. ClientHttpRequestInterceptor 请求拦截器

2.1 发送 GET 请求 getForObject()、getForEntity()、exchange()

// 1. getForObject()
User user1 = this.restTemplate.getForObject(uri, User.class); // 2. getForEntity()
ResponseEntity<User> responseEntity1 = this.restTemplate.getForEntity(uri, User.class);
HttpStatus statusCode = responseEntity1.getStatusCode();
HttpHeaders header = responseEntity1.getHeaders();
User user2 = responseEntity1.getBody(); // 3. exchange()
RequestEntity requestEntity = RequestEntity.get(new URI(uri)).build();
ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);
User user3 = responseEntity2.getBody();

2.2 发送 POST 请求 postForObject()、postForEntity()、exchange()

// 1. postForObject()
User user1 = this.restTemplate.postForObject(uri, user, User.class); // 2. postForEntity()
ResponseEntity<User> responseEntity1 = this.restTemplate.postForEntity(uri, user, User.class); // 3. exchange()
RequestEntity<User> requestEntity = RequestEntity.post(new URI(uri)).body(user);
ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);

参考:

  1. 《REST访问(RestTemplate)》:https://rensanning.iteye.com/blog/2362105
  2. 《HTML 多媒体》:http://www.runoob.com/html/html-media.html

每天用心记录一点点。内容也许不重要,但习惯很重要!

Spring Boot REST(一)核心接口的更多相关文章

  1. Spring Boot实现通用的接口参数校验

    Spring Boot实现通用的接口参数校验 Harries Blog™ 2018-05-10 2418 阅读 http ACE Spring App API https AOP apache IDE ...

  2. Spring Boot Hello World (restful接口)例子

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)

    Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...

  4. spring boot(3)-Rest风格接口

    Rest接口 虽然现在还有很多人在用jsp,但是其实这种动态页面早已过时,现在前端流行的是静态HTML+ rest接口(json格式).当然,如果是单台服务器,用动态还是静态页面可能没什么很大区别,但 ...

  5. Spring Boot (2) Restful风格接口

    Rest接口 动态页面jsp早已过时,现在流行的是vuejs.angularjs.react等前端框架 调用 rest接口(json格式),如果是单台服务器,用动态还是静态页面可能没什么大区别,如果服 ...

  6. Spring Boot Swagger2自动生成接口文档

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 1.问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 2 ...

  7. Spring Boot 集成 Swagger 构建接口文档

    在应用开发过程中经常需要对其他应用或者客户端提供 RESTful API 接口,尤其是在版本快速迭代的开发过程中,修改接口的同时还需要同步修改对应的接口文档,这使我们总是做着重复的工作,并且如果忘记修 ...

  8. spring boot:用swagger3生成接口文档,支持全局通用参数(swagger 3.0.0 / spring boot 2.3.2)

    一,什么是swagger? 1,  Swagger 是一个规范和完整的文档框架, 用于生成.描述.调用和可视化 RESTful 风格的 Web 服务文档 官方网站: https://swagger.i ...

  9. spring boot:使用validator做接口的参数、表单、类中多字段的参数验证(spring boot 2.3.1)

    一,为什么要做参数验证? 永远不要相信我们在后端接收到的数据, 1,防止别人通过接口乱刷服务:有些不怀好意的人或机构会乱刷我们的服务,例如:短信接口, 相信大家可能很多人在工作中遇到过这种情况 2,防 ...

  10. 提升Spring Boot项目中API接口并发能力的一个注解,效果明显

    异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次 ...

随机推荐

  1. linux suse 同步时间

    ntpdate 210.72.145.44 ip为中国(国家授时中心)

  2. ORA-30926: 无法在源表中获得一组稳定的行ORA-06512: 在 "STG.FP_MO_SPLIT", line 1562 临时

  3. 可视化工具Navicat的使用

    可视化工具Navicat的使用 掌握Navicat的基本使用 # PS:在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图 ...

  4. 食物链(带权&种类并查集)

    食物链 http://poj.org/problem?id=1182 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9326 ...

  5. JavaScript各种继承方式(一):原型链继承(prototype chaining)

    一 原理 子类的构造函数的原型对象,是父类的构造函数创建的实例. function Fruit(){ this.name = '水果'; this.nutrition=['维生素','膳食纤维']; ...

  6. html5文件读取+按钮样式重置+文件内容预览

    FileReader读取文件详细介绍请访问:http://www.cnblogs.com/xyyt/p/9066882.html FileReader提供了如下方法: readAsArrayBuffe ...

  7. CyclicBarrier簡介

    package CyclicBarrier; import java.util.concurrent.CyclicBarrier;import java.util.concurrent.atomic. ...

  8. iOS版本设置

    Base SDK指的是当前编译所用的SDK 版本: iOS Deployment Target指的是,编译后的 app 可在 终端的哪个 版本上运行. 设置方法: 点击xcode工程左侧项目名称-&g ...

  9. VS中,添加完Web引用(WebServer引用/Web服务引用),写代码时引用不到

    VS中,添加完Web引用(WebServer引用/Web服务引用),写代码时引用不到 添加完之后要等一会儿 等一会儿 等一会儿 就有了

  10. [leetcode]304. Range Sum Query 2D - Immutable二维区间求和 - 不变

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...