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. MATLAB GUI图片添加背景

    global im [filename,pathname]=uigetfile('*.jpg','输入图片'); file=strcat(pathname,filename); im=imread(f ...

  2. editplus设置自动换行方法 editplus自动换行设置步骤

    原文链接:https://www.jb51.net/softjc/165897.html 发布时间:2014-05-14 17:03:54   作者:佚名    我要评论 editplus自动换行设置 ...

  3. CSS实现禁止文字选中

    E10平台预览第四版中包含了对 CSS3 新属性 -ms-user-select 的支持,Web 开发人员可以利用这一新属性轻松精确的控制用户可以在网站上选择哪些文本. user-select:non ...

  4. python print 美化

    本来是按照百度搜到的教程来为print输出添加颜色 然后bing了下,已经有封装好的包了,就是python-blessings 效果如图 API网址:https://blessings.readthe ...

  5. Python hash() 函数

    Python hash() 函数  Python 内置函数 描述 hash() 用于获取取一个对象(字符串或者数值等)的哈希值. 语法 hash 语法: hash(object) 参数说明: obje ...

  6. 以太坊博弈游戏 -- FOMO3D,讽刺人性

    以下资料收录自各个博客,下面给出链接. 总的来说,这是基于以太坊的“菠菜”游戏,大资金盘,亏多盈少,大家看看就好. 官网地址:http://exitscam.me/play 出现 7月16日,当时这个 ...

  7. 2018.3.15 css课外小知识

    1, 如果手动写动画, 最小的时间间隔是多久 为什么 多数显示器默认频率是60Hz  1s刷新60次  所以理论最小是1/60*1000ms=16.7ms 2. display:inline-bloc ...

  8. 2017.9.26JQuery源码解析一 架构与依赖

    jq1.0: css选择符   事件处理  ajax交互 1.2.3: 引入数据缓存,解决循环引用与大数据保存问题 1.3.  : 使用全新的选择器引擎sizzle,在各个浏览器下全面超越其他同类js ...

  9. 在BCH硬分叉后防止重放攻击-2

    重放攻击原理和防范措施——如何安全分离BCH的分来源:巴比特018-11-18 16:49:37 热度 12390 第0章 引言 即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要 ...

  10. js拷贝指定内容到剪切板

    function copyTextToClipboard(text) { var textArea = document.createElement("textarea"); te ...