SpringBoot个人学习
一、SpringBoot版本区别
SpringBoot 2基于Spring5和JDK8,而Spring 1.x则用的是低版本
二、REST规范
1、协议
API与用户的通信协议,总是使用HTTPs协议。
2、域名
<1>.应该尽量将API部署在专用域名之下,(这中情况会存在跨域问题)
https://api.example.com
<2>.如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
3、版本(Versioning)
应该将API的版本号放入URL。
https://api.example.com/v1/
另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。
https://api.example.com/?version=v1
4、路径
路径又称"终点"(endpoint),表示API的具体网址,视网络上任何东西都是资源,均使用名词表示(可复数),在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
5、HTTP动词
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面五个(括号里是对应的SQL命令)。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
还有两个不常用的HTTP动词。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
下面是一些例子。
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园
GET /zoos/ID/animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
6、过滤信息(Filtering)
如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
下面是一些常见的参数。
https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。
7、状态码(Status Codes)
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
8、错误处理(Error handling)
如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。
{error: "Invalid API key"
}
9、返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
10、Hypermedia API
RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
比如,当用户向api.example.com的根目录发出请求,会得到这样一个文档。
{"link": {"rel": "collection https://www.example.com/zoos","href": "https://api.example.com/zoos","title": "List of zoos","type": "application/vnd.yourformat+json"
}}
三、SpringBoot注解
1、@ResponseBody
表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。
2、@Controller
用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。
3、@RestController
用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。
4、@ResquestMapping
提供路由信息,负责URL到Controller中的具体函数的映射。
5、@Autowired
自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。
6、@Service
一般用于修饰service层的组件
7、@Repository
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。
8、@PathVariable
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)
9、@RequestParam
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
10、@PathVariable和@RequestParam的区别
①请求路径上的区别:
@RequestParam是https:url ?键值对
@PathVariable是https:url /参数
②@PathVariable主要用于接收http://host:port/path/{参数值}数据。③@RequestParam主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。
@RequestParam用于获取参数,可获取?username="sss"这种?后面的参数值
11、@RequestBody和@ResponseBody的区别
(1) @RequestBody
①作用是将前端传来的json格式的数据转为自己定义好的javabean对象
②传入数据的属性名称要和后端javabean中定义的一致
③写在方法的参数前,不能写在方法名上方
(2) @ResponseBody
作用是将后端以return
返回的javabean类型数据转为json类型数据。
四、Maven3
1、概念
2、生命周期
clean 生命周期是用于清理项目 (默认是删除了target文件夹)
default 生命周期是用于构建项目
site 生命周期是是用于建立项目站点
3、命令
1)、mvn compile 编译,将Java 源程序编译成 class [字节码]文件。
2)、mvn test 测试,并生成测试报告
3)、mvn clean 将以前编译得到的旧的 class 字节码文件删除
4)、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
5)、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
SpringBoot个人学习相关推荐
- 8. SpringBoot基础学习笔记
SpringBoot基础学习笔记 课程前置知识说明 1 SpringBoot基础篇 1.1 快速上手SpringBoot SpringBoot入门程序制作 1.2 SpringBoot简介 1.2.1 ...
- SpringBoot基础学习之SpringBoot配置(上篇)
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...
- SpringBoot基础学习之整合Swagger框架(上篇)
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...
- SpringBoot入门学习(六)之云收藏项目
目录 1.Spring Boot的思维导图分析 2.项目介绍 3.项目分析 4.创建SpringBoot项目,添加依赖 5.数据库 6.特别说明 7.效果展示 8.源码下载地址 本篇文章是Spring ...
- 《SpringBoot框架学习二之HTTP协议》
<SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...
- 【SpringBoot】最新版2019Spring Boot配置解析,源码解析(速成SpringBoot)——学习笔记版【2】
SpringBoot配置文件 文章目录 SpringBoot配置文件 四.配置文件 1.简介 2.YAML用法 2.1 简介 2.2语法 3.为属性注入值 3.1使用.yml配置文件 3.1编写.ym ...
- SpringBoot入门学习(五)之旅游网站项目
目录 1.项目需求 2.技术需求 3.pom.xml 4.application.yml 4.MybatisPlus的配置文件 5.springboot中配置日期类型转换器 6.用户管理 7.线路管理 ...
- SpringBoot基础学习之整合SpringSercurity框架
前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个SpringB ...
- 项目记录(1)---SpringBoot的学习
SpringBoot 0.学习目标 了解SpringBoot的作用 掌握java配置的方式 了解SpringBoot自动配置原理 掌握SpringBoot的基本使用 了解Thymeleaf的基本使用 ...
- SpringBoot+Shiro学习(一):主要模块介绍
这篇文章是我最近对SpringBoot+Shiro+mybatis+redis一个练手项目的记录. 我是按照慕课网的一篇课程+百度进行练手的 慕课课程 练手项目Github地址 跟着开涛学Shiro ...
最新文章
- mongodb的聚合操作
- mongodb查找报错
- linux怎么创建新用户名和密码错误,linux重命名root后,使用su命令切换新用户时,提示密码错误...
- 一份传世典文:十年编程(Teach Yourself Programming in Ten Years)
- 腾讯首次公布微信最全用户数据【完整版】
- 学python用ubuntu还是win10_Windows 10上使用Ubuntu的优点
- JavaScript基础04【逻辑、复制、关系、相等运算符、Unicode编码表】
- OpenXava 4.5支持JPA继承映射和自动化业务逻辑
- oracle中to_date函数详解
- 全数字伺服系统中位置环和电子齿轮的设计
- webstorm 配置sass
- Spring好处—总结
- 解析二进制文件的工具方法
- 电信天翼网关接不上服务器无信号咋小,天翼网关有wifi信号,但不能上网的问题汇总解答...
- 怎么使用电脑打开手机分享的vcf联系人文件
- 券商单向视频见证开户全面开放!菊风泛金融单向视频开户一体化解决方案极速助力
- 【前端面试题】01—42道常见的HTML5面试题(附答案)
- 基于 Redis 的分布式锁到底安全吗(下)?
- 机器人届的“擎天柱”来了!能够在空中变形以快速栖息的四旋翼机器人
- ssm基于SSM的南昌旅游网站管理系统设计与实现 毕业设计源码101407