开发规范-Restful
表述性状态转移,他是一种软件架构风格
描述模块功能通常用复数(加s),表示此类资源
HTTP 方法 | 含义 | RESTful 表现 | 示例 URI |
---|---|---|---|
GET | 查询资源 | 获取某个资源或资源列表 | /users (用户列表),/users/1 (ID为1的用户) |
POST | 创建资源 | 新增一个资源 | /users (创建新用户) |
PUT | 更新资源 | 更新整个资源(幂等) | /users/1 (更新用户1信息) |
PATCH | 局部更新 | 更新部分字段 | /users/1 (只改名等) |
DELETE | 删除资源 | 删除某个资源 | /users/1 (删除用户1) |
操作 | 方法 | URI | 描述 |
---|---|---|---|
获取用户列表 | GET | /users |
获取所有用户 |
获取指定用户 | GET | /users/1 |
获取ID为1的用户 |
创建新用户 | POST | /users |
创建用户(请求体中传 JSON) |
更新用户信息 | PUT | /users/1 |
更新用户1的全部字段 |
局部更新 | PATCH | /users/1 |
更新用户1的部分字段 |
删除用户 | DELETE | /users/1 |
删除用户1 |
人话:动作不写在url里面,由http响应类型决定
前后端统一响应结果(Result)
字段 | 类型 | 含义 |
---|---|---|
code | int | 状态码,如 200 成功,400 参数错误 |
message | String | 对应状态的消息提示 |
data | 任意类型 | 返回的真实业务数据,如对象、列表、分页结果等 |
开发流程
明确需求
接口文档
思路分析
接口开发
接口调试
postman测试
前后端联调
日志技巧
直接使用 @Slf4j标签
公共的路径可以抽取在@RequestMapping(“/depts”)
设置请求参数默认值
@RequestParam(defaultValue=“1”)
PageHelper分页插件
引入依赖
<!-- 分页查询依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.7</version>
</dependency>
使用:
//1、设置分页参数
PageHelper.startPage(page,pageSize);
//2、执行查询
List<Emp> empList=empMapper.list();
Page<Emp> p=(Page<Emp>) empList;
//3、封装pageBean对象
PageBean pageBean=new PageBean((int) p.getTotal(),p.getResult());
注意:在编写SQL语句时不要在后面加;,因为PageHelper会自动在后面加上limit限制和;
感想
请求参数:参考前面博客
使用参数:
单个参数、对象参数可以直接用属性名
多个参数需要用@param绑定或者配置保留形参名配置
MySQL返回结果给对象
需要保障对象名对应
不对应需要别名一样,或者绑定,或者开启驼峰与下划线名字映射配置
文件上传
将本地数据上传到服务器,供其他用户浏览下载
前端页面三要素:
表单项type=“file”
表单提交方式:post
表单的entrytype属性:multipart/form-data
服务端接收文件:MultipartFile image(形参)
接收的是临时文件,请求结束自动删除
转化为字符串的方法以及细节
场景 | 推荐用法 |
---|---|
把任何对象转成字符串(调试、日志) | String.valueOf(obj) ✅ 安全、null 也不会错 |
对象已经是 String 类型,想强转 | (String) obj ✅ 仅限确切类型已知 |
可能是 null 的对象想要字符串 | String.valueOf(obj) ✅ 推荐方式 |
文件存储
本地存储
将文件存储在本地服务器磁盘中
image.transferTo(new File(pathname));
防止上传的文件名重复导致覆盖
使用uuid(通用唯一识别码)解决
UUID.randomUUID.toString()
文件存储:
@Slf4j
@RestController
public class UploadController {
@PostMapping("/upload")
public Result upload(MultipartFile image) throws Exception {
String originalFilename=image.getOriginalFilename();
String newFilename= UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
image.transferTo(new File("D:/tmp/"+newFilename));
return Result.success();
}
}
注意:spring中上传文件大小默认为1M,大文件需进行如下配置
本地存储现在不怎么用了
因为:浏览器无法直接访问、服务器磁盘有限、磁盘坏了
方法:
1、自己搭建存储集群(FastDFS、MinIO)
2、使用云服务
第三方服务-通用思路
准备->参考SDK(软件开发工具包)->集成使用
配饰文件
问题:用到不同技术配置信息放在java类中不便于集中管理
@value:外部配置的属性注入
用法:@value(“${配置文件中的key}”)
@Value("${Aliyun.oss.endpoint}")
private String endpoint;
@Value("${Aliyun.oss.bucketName}")
private String bucketName;
@Value("${Aliyun.oss.region}")
private String region;
Aliyun.oss.endpoint=https://oss-cn-beijing.aliyuncs.com
Aliyun.oss.bucketName=web-tlias-lhx
Aliyun.oss.region =cn-beijing
配置文件类型(yml)
XML:结构好但是臃肿
properties:层级结构不清晰
yml:结构清晰,简洁
yml基础语法:
大小写敏感
数字左边必须有空格,作为分隔符
使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea自动转换)
缩进的空格数目不重要,只要相同层级的元素左对齐即可
#表示注释,从这个字符一直到行尾,都会被解析器忽略
#定义对象/Map集合
user:
name: Tom
age: 20
address: beijing
#定义数组/List/Set集合
hobby:
- java
- c
- game
- sport
@ConfigurationPeoperties注解(设置前缀)
@Value标签比较繁琐,用以代替
使用的前提:
key值需要与字段名形同
设置get、set方法(@Data标签)
@ConfigurationPeoperties批量将外部属性配置注入到bean对象属性中
(属性多,想复用时用)
@Value一个一个进行外部属性注入(属性少时候用)