# bootplus
  基于SpringBoot + Shiro + MyBatisPlus的权限管理框架

## git分支说明
  目前开发使用`dev`分支,开发完成或者发布版本需要合并`master`分支

> Tips:如果是第一次克隆仓库。需要从远程分支检出`dev`分支
```bash
git checkout -b dev origin/dev
```

```bash
# 检出master分支
git checkout master
# 合并dev分支
git merge dev
# 推送
git push origin master
```

##### Bug修复说明
  如果是修复线上的Bug、则从`master`分支检出一个`hotfix-0728`Bug修复分支,改完后分别合并`master`和`dev`分支并删除hotfix分支
```bash
git checkout master
git checkout -b hotfix-demo
// ... fix bugs & commit ....

# 检出master分支
git checkout master
# 合并hotfix分支
git merge hotfix-demo
# 推送
git push
# 检出dev分支
git checkout dev
# 合并hotfix分支
git merge hotfix-demo
# 推送
git push

// 删除本地分支
git branch -D hotfix-demo
```


## mvn乱码问题
```bash
mvn -v
// 默认编码:platform encoding: GBK
```
> 设置windows环境变量:设置后需要重启IDEA才能生效
- Key: `MAVEN_OPTS`
- Value: `-Xms256m -Xmx512m -Dfile.encoding=UTF-8`

## Git标签管理
> 查看远程标签
```bash
git tag
```
> 建新标签
```bash
git tag v1.0
```
> 删除远程标签
```bash
git tag -d 标签名
```
> 从远程仓库中移除这个标签
```bash
git push origin :refs/tags/标签名
```
> 推送标签到远程仓库
```bash
git push --tags
```

## 表结构修改记录
> 2020/3/12

## api接口测试示例
### curl
```bash
curl --location --request POST 'http://dev-saas.diandianys.com/api/app' \
--header 'Content-Type: application/javascript' \
--header 'sign: test' \
--data '{
    "channel": "12",
    "format": "JSON",
    "hosId": "00000",
    "oper": "127.0.0.1",
    "random": "5680",
    "spid": "1001",
    "version": "1",
    "service": "smarthos.system.area.list.version"
}'
```

## `Lombok`使用说明
- `@NoArgsConstructor`: 自动生成无参数构造函数
- `@Builder`: 一步步创建一个对象(.builder())
- `@AllArgsConstructor`: 自动生成全参数构造函数
- `@Data`: 自动为所有字段添加`@ToString`, `@EqualsAndHashCode`, `@Getter`方法,为非final字段添加`@Setter`,和`@RequiredArgsConstructor`

## `FastJson`使用说明
1. `SerializerFeature`说明

| 名称 | 含义 | 备注 |
| :---: | :---: | :---: |
| QuoteFieldNames | 输出key时是否使用双引号,默认为true |  |
| UseSingleQuotes	 | 使用单引号而不是双引号,默认为false |  |
| WriteMapNullValue | 是否输出值为null的字段,默认为false |  |
| WriteEnumUsingToString | Enum输出name()或者original,默认为false |  |
| WriteEnumUsingName | enum值序列化为其Name,默认为true |  |
| UseISO8601DateFormat | Date使用ISO8601格式输出,默认为false |  |
| WriteNullListAsEmpty | List字段如果为null,输出为[],而非null |  |
| WriteNullStringAsEmpty | 字符类型字段如果为null,输出为”“,而非null |  |
| WriteNullNumberAsZero | 数值字段如果为null,输出为0,而非null |  |
| WriteNullBooleanAsFalse | Boolean字段如果为null,输出为false,而非null |  |
| SkipTransientField | 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true |  |
| SortField | 按字段名称排序后输出。默认为false |  |
| WriteTabAsSpecial | 把\t做转义输出,默认为false | 不推荐 |
| PrettyFormat | 结果是否格式化,默认为false | 不推荐 |
| WriteClassName | 序列化时写入类型信息,默认为false。反序列化是需用到 | 不推荐 |
| DisableCircularReferenceDetect | 消除对同一对象循环引用的问题,默认为false | 不推荐 |
| WriteSlashAsSpecial | 对斜杠’/’进行转义 | 不推荐 |
| BrowserCompatible | 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false | 不推荐 |
| WriteDateUseDateFormat | 全局修改日期格式,默认为false。 | 不推荐 |
| DisableCheckSpecialChar | 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false | 不推荐 |
| NotWriteRootClassName | 含义 | 不推荐 |
| BeanToArray | 将对象转为array输出 | 不推荐 |
| WriteNonStringKeyAsString | 将属性key写为String | 不推荐 |
| NotWriteDefaultValue | 不设默认值 | 不推荐 |
| BrowserSecure |  | 不推荐 |
| IgnoreNonFieldGetter | 忽略没有getter方法的属性 | 不推荐 |
| WriteNonStringValueAsString | 不是String的字段写为String |  |
| IgnoreErrorGetter | 忽略掉getter方法出错的属性 |  |
| WriteBigDecimalAsPlain | 大数字写成文本 |  |
| MapSortField | 字段按照TreeMap排序,默认false |  |