Spring Boot REST(一)核心接口
Spring Boot REST(一)核心接口
Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html)
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 包含以下几个部分:
HttpMessageConverter
对象转换器ClientHttpRequestFactory
默认是 JDK 的 HttpURLConnectionResponseErrorHandler
异常处理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);
参考:
- 《REST访问(RestTemplate)》:https://rensanning.iteye.com/blog/2362105
- 《HTML 多媒体》:http://www.runoob.com/html/html-media.html
每天用心记录一点点。内容也许不重要,但习惯很重要!
Spring Boot REST(一)核心接口的更多相关文章
- Spring Boot实现通用的接口参数校验
Spring Boot实现通用的接口参数校验 Harries Blog™ 2018-05-10 2418 阅读 http ACE Spring App API https AOP apache IDE ...
- Spring Boot Hello World (restful接口)例子
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)
Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...
- spring boot(3)-Rest风格接口
Rest接口 虽然现在还有很多人在用jsp,但是其实这种动态页面早已过时,现在前端流行的是静态HTML+ rest接口(json格式).当然,如果是单台服务器,用动态还是静态页面可能没什么很大区别,但 ...
- Spring Boot (2) Restful风格接口
Rest接口 动态页面jsp早已过时,现在流行的是vuejs.angularjs.react等前端框架 调用 rest接口(json格式),如果是单台服务器,用动态还是静态页面可能没什么大区别,如果服 ...
- Spring Boot Swagger2自动生成接口文档
一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 1.问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 2 ...
- Spring Boot 集成 Swagger 构建接口文档
在应用开发过程中经常需要对其他应用或者客户端提供 RESTful API 接口,尤其是在版本快速迭代的开发过程中,修改接口的同时还需要同步修改对应的接口文档,这使我们总是做着重复的工作,并且如果忘记修 ...
- spring boot:用swagger3生成接口文档,支持全局通用参数(swagger 3.0.0 / spring boot 2.3.2)
一,什么是swagger? 1, Swagger 是一个规范和完整的文档框架, 用于生成.描述.调用和可视化 RESTful 风格的 Web 服务文档 官方网站: https://swagger.i ...
- spring boot:使用validator做接口的参数、表单、类中多字段的参数验证(spring boot 2.3.1)
一,为什么要做参数验证? 永远不要相信我们在后端接收到的数据, 1,防止别人通过接口乱刷服务:有些不怀好意的人或机构会乱刷我们的服务,例如:短信接口, 相信大家可能很多人在工作中遇到过这种情况 2,防 ...
- 提升Spring Boot项目中API接口并发能力的一个注解,效果明显
异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是"异步调用"?"异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次 ...
随机推荐
- Real Time Rendering 2
[Real Time Rendering 2] 1.The light vector l is usually defined pointing in a direction opposite to ...
- oracle 存储过程模板
CREATE OR REPLACEPROCEDURE PROCE_NAME(V_IN varchar2, V_OUT out varchar2) ASBEGIN --... commit; V_O ...
- vue项目打包后图片路径问题
当用vue-cli自动构建项目后,有两种运行方法,分别是: npm run dev : 提供一个开发的环境,自动热更新,资源使用绝对路径,所以可以正常看到背景图片. npm run build : 打 ...
- 第四章 栈与队列(d)队列接口与实现
- 二叉树,B树,B+树,红黑树 简介
什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树.二叉树的子树有左右之分,并且次序不能任意颠倒.二叉树是递归定 ...
- Anaconda常用命令大全
使用conda 首先我们将要确认你已经安装好了conda 配置环境 下一步我们将通过创建几个环境来展示conda的环境管理功能.使你更加轻松的了解关于环境的一切.我们将学习如何确认你在哪个环境中,以及 ...
- 【nlp】中文分词基础原则及正向最大匹配法、逆向最大匹配法、双向最大匹配法的分析
分词算法设计中的几个基本原则: 1.颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”.“公安局 长” ...
- .“代理XP”组件已作为此服务器安全配置的一部分被关闭的解决办法
“代理XP”组件已作为此服务器安全配置的一部分被关闭.系统管理员可以使用sp_configure来启用“代理XP”.有关启用“代理XP”的详细信息,请参阅SQL Server联机丛书中的“外围应用配置 ...
- Tomcat端口的改变和编码的设置
1.更改默认的端口: 在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号: 首先: 在Tomcat的根(安装)目录下,有一个conf文件夹, ...
- JSP使用sessionScope获取session值
场景:有些实体对象可以放到HttpSession对象中,保正在一个会话期间可以随时获取这个对象的属性,例如可以将登录用户的信息写入session,以保证页面随时可以获取并显示这个用户的状态信息.下面以 ...