# spring-back
**Repository Path**: alexandrmisko_admin/spring-back
## Basic Information
- **Project Name**: spring-back
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 0
- **Created**: 2022-03-12
- **Last Updated**: 2023-09-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 春禾支教项目
> - 此文件为后端项目的描述性文件,所有关于项目的问题/难点/解决方法/功能实现等均可以加入该文件中。
>
> - 本文件格式为markdown文件,可以通过符号标记的形式来改变文字的加粗/高亮/h1,h2显示等。
> - 语法格式可参考:[在线markdown编辑器_微信公众号markdown排版工具](https://markdown.com.cn/editor/)
## 一、git命令的使用
```shell
- 首先,当我们第一次使用git时,我们要先初始化git:
- 通过使用git config命令来设置自己的name和email:
git config --global user.name "你的名字" //配置用户名
git config --global user.email 1032628545@qq.com //配置邮箱
- 接着,我们就可以把网站上的项目clone下来了,通过使用:
git clone [ssh地址/https地址]
- 克隆下来之后,就可以修改代码了,当你修改完之后,我们要把自己修改的内容添加,提交,再推送到remote远程网站仓库里,这样
- 大家都可以看到你的修改了,使用
#1. 添加,add后加空格再加.就可以把所有修改都添加了
git add .
#2. "写上你的本次修改的信息,也就是你对提交的注释,可以让别人了解到你做了什么,或者是谁修改的"
git commit -m "你的注释信息"
#3. commit只是你在本地提交了,而没有发送到remote仓库,所以:
git push
- 随时可以使用的命令
git status #该命令是查看当前仓库内有哪些需要add的文件(untracked)或者有哪些需commit的文件(uncommitted)
git diff #该命令是查看你在上一次commit之后,都修改了哪些文件
git log #查看当前git仓库的commit日志(记录)
- 遇到的问题
1. git push提示:`hint: (e.g., 'git pull ...') before pushing again`,并没有push成功
#此情况表示,有其他成员改了remote仓库中的文件,你本地的文件仓库不是最新的代码,所以在push之前要先使用:
git pull
#来拉取远程代码,每天写代码之前可以先用一次git pull,最后push代码时也用一次pull
2.git pull提示(git pull之前一定要先add和commit,否则会提示本地代码将被覆盖!!!):
`remote: Enumerating objects: 14, done.
`remote: Counting objects: 100% (14/14), done.
`remote: Compressing objects: 100% (7/7), done.
`remote: Total 9 (delta 3), reused 0 (delta 0), pack-reused 0
`Unpacking objects: 100% (9/9), done.
`From gitee.com:alexandrmisko_admin/spring-front
` fe0907a..6ad2ed4 master -> origin/master
`Auto-merging 王波.txt
`CONFLICT (content): Merge conflict in 王波.txt
`Automatic merge failed; fix conflicts and then commit the result.
这种情况是因为,A跟你改了同一个文件,并且A比你先提交上去;然后你push的时候会提示错误(上述问题一),此时你使用pull,就会提示这个错误;所以,要使用git status找到并进入到你俩同时修改的文件中去,此时文件中会标出来A改的内容和你改的内容,大家伙一起商量后,保留其一。接下来,再使用:
git add .
git commit -m "";
git push
命令就可以解决冲突了。
```
## 二、controller中注解、方法参数的使用
### 1. @RestController
- 该注解标识该controller类的所有方法返回值均是JSON格式。
- 所以,当我们使用该注解后,返回的任何String、Object、自定义类均会被自动转化为JSON形式,并返回至前端。(我们使用工具类R来规范JSON格式,可见下方R包的使用帮助)
### 2.@RequestMapping(value=“访问地址”,method=“get/post”)
- 该注解标识controller的间接访问地址(相当于之前的servlet的地址映射`servlett-mapping`)。
- **该注解可用于两个地方:**
- 类
- 方法
区别见如下:
```java
@RequestMapping(value = "/admin")
public class AdminController {
@RequestMapping(value = "/login")
public R adminLogin(String userName,String passWord){
```
- 标在类上的`https://项目地址/admin`表示,该controller的整体访问地址是`https:///admin`,而当我们访问某个具体的`login`方法时,则须使用`https:///admin/login`来访问login方法。
- 该注解还有一些”变体“:
- @PostMapping
- 其实,postMapping注解内部的定义的时候,包含了@RequstMapping(method=get):
-
- @GetMapping
- 实现与PostMapping类似
### 3.@RequstParam
> 每个方法可使用多个。
该注解放在方法参数前面。
- 当前端传给后端参数时,要是传递了好多个参数,spring咋知道把哪个赋给哪个?
- 一般,你定义的参数名是啥,前端就得跟你的参数名相对应。
- 要是就想前后端用不一样的参数名呢?
- 用`@RequstParam(value=”别名“)`,其中的Value字段就是你给参数起的`别名`,起了别名原来的名还能用吗?(我也没试过)
- 还有@RequstParam(required=”true“),表示前端必须给你传这个参数,不传就不让请求。
### 4.@PathVariable:star:
```java
@RequestMapping(value = "/{admin_id}", method = RequestMethod.GET)
public R oneAdmin(@PathVariable(value = "admin_id") Integer id){
Admin admin = adminService.findOneAdmin(id);
```
> PathVarible:就是说URL路径中就包含了将要传递的方法参数变量。
- 可以看到,`value = "/{admin_id}"`,与之前定义的不太一样。{variable}就是前端传给后端的变量,只不过没放在请求中,而是放在了URL中。看个例子:
- `https://项目地址/admin/2`,该地址是请求`id=2`的admin的信息。
- 但是,方法怎么知道要用地址中的值作为参数呢?
- 此时,就需要用到了`PathVariable`注解,其中的value值就和上边`RequestMapping`中的`{admin_id}`相对应,告诉方法,你要用的`id`请去地址中找。
### 5.@RequestBody:star:
> **每个方法只能使用一次**该注解,具体原因可search一下(和http的连接流有关好像)。
```java
public R adminRegister(@RequestBody(required = true) Admin admin){
```
这次,我们方法参数中直接放了个类`Admin`,这样可以吗?单独不可以,需要加上`@RequestBody`注解.
- 当我们使用了@RequestBody后,spring就会为我们把前端传过来的**JSON格式的字符串**(**且只能是JSON格式**)自动封装成一个类。
- 那么,spring咋知道json里的哪个对应我们类中的字段呢?
- 最常用的方法:前端传过来的JSON数据中,每一个key-value的key值均要与Admin类中的属性域一样。看图:
-
**前端JSON**
-
- 有其他对应方法吗?应该有:rofl:,**找到了补充一下**。
- @RequestBody(required = true),required=true表示该参数必须有,前端必须要传过来,不传就不让访问。其他的注解也有该属性,可以点进注解看看有没有。(使用`ctrl+LeftClick`)
### 6.@Authorization
- 该注解使用在方法上,表示该方法在被请求时,要验证是否已经登录(后续可加上认证的验证)。
- 前端在请求controller时,均会经过LoginInterceptor过滤器,在该过滤器中完成验证的逻辑。
# 三、R工具类的更新
由于之前对于R工具类没有使用泛型,在前端接口文档处无法看到所返回的data信息,显示为空。所以,修改了一下R工具类。**之前的方法仍可以使用,但idea会
给出未检查(unchecked)的警告,可以暂时忽略该警告,不会影响运行。**
可以参考下面的例子,使用更改过的R类:
也可以使用其他构造方法,可以自己自定义,怎么好用就怎么来。
```java
public R> getActList(){ //返回时加上返回data参数的类型,如果为空则不用添加或使用