Git冲突问题;
根本原因:分支之间的版本不一致
原因:
1.远程仓库的版本和你要提交的版本不一致,并且是修改了同一个文件的相同部分的代码,
提交的版本不一致可能会导致冲突
2.或者多个分支进行合并的时候,多个分支都修改了同一个部分的代码,
如下图是第一种情况的演示:head下面 ====上面是本分支的内容
===下面>>>上面是远程分支的内容 让你选择保留哪一个
你在什么分支开发:
开发分支,由技术经理创建的一个开发分支dev,小组内成员pull下来,进行开发,完成
之后开发经理合并到主分支
一个场景假设:
假设当前远程dev仓库版本为A
我们拉下来都是A
在我之前有一个同组的修改了a.txt文件,commit到B版本,然后push到远程dev分支 变成B版本
此时我是A版本,如果我不修改a.txt文件,commit到本地变成C版本,虽然目前C版本和远程的B版本不一致,但是因为没有修改同一个文件,push到远程是没有问题的。
但是我修改了修改a.txt文件,commit到本地变成C版本,目前C版本和远程的B版本不一致,且修改了同一个文件,这时候会产生冲突
一下原因缺一不可:
产生的原因:
1.本地版本和远程分支版本不一致
2.且修改了同一个文件
试想:怎么避免冲突或者处理呢?
避免:
先进行pull再进行push
处理:
手动选择处理的冲突 有图形化界面和手动解决两种方式
Maven:面试
常用命令
maven版本冲突:
两种解决方式
内容管理模块的结构:
内容管理父工程的主要职责是聚合内容管理接口和内容管理接口实现两个工程,它的父工程是
xuecheng-plus-parent。
接口的写法!!
接口的设计:
协议
包括content-type
通常协议采用HTTP,查询类接口通常为get或post,查询条件较少的使用get,较多的使用post。
本接口使用 http post。
还要确定content-type,参数以什么数据格式提交,结果以什么数据格式响应。
一般情况没有特殊情况结果以json 格式响应。
请求参数
请求方式
响应数据
如下所示:
Java
POST /content/course/list?pageNo=2&pageSize=1
Content-Type: application/json
{
"auditStatus": "202002",
"courseName": "",
"publishStatus":""
}
###成功响应结果
{
"items": [
{
"id": 26,
"companyId": 1232141425,
"companyName": null,
"name": "spring cloud实战",
"users": "所有人",
"tags": null,
"mt": "1-3",
"mtName": null,
"st": "1-3-2",
"stName": null,
"grade": "200003",
"teachmode": "201001",
"description": "本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。",
"pic": "https://cdn.educba.com/academy/wp-content/uploads/2018/08/Spring-BOOT-Interview-questions.jpg",
"createDate": "2019-09-04 09:56:19",
"changeDate": "2021-12-26 22:10:38",
"createPeople": null,
"changePeople": null,
"auditStatus": "202002",
"auditMind": null,
"auditNums": 0,
"auditDate": null,
"auditPeople": null,
"status": 1,
"coursePubId": null,
"coursePubDate": null
}
],
"counts": 23,
"page": 2,
"pageSize": 1
}
接受数据封装的model,返回查询结果的model
!!个人心得:
拿到一个接口文档 先去创建其模型类,即接受的数据封装成model类,返回的数据封装成model类,看其是否通用,通用放在xuecheng-plus-base
pageParams分页参数通过url的key/value传入,queryCourseParams通过json数据传入,使用@RequestBody注解将json转成QueryCourseParamsDto对象
注意这里@RequestBody注解加required=false,如果不加,前端不传json数据,只传pagesize
pageNo访问不到接口,加上代表这个参数可以为null
3.3.4 模型类的作用
DTO数据传输对象、PO持久化对象,DTO用于接受接口层向业务层之间传输数据,
PO用于接受业务层与持久层之间传输数据,有些项目还会设置VO对象,
VO对象用在前端与接口层之间传输数据,在接口层进行封装数据
如下图:
当前端有多个平台且接口存在差异时就需要设置VO对象用于前端和接口层传输数据。
比如:
课程列表查询接口,根据需求用户在手机端也要查询课程信息,此时课程查询接口是否需要编写手机端和PC端两个接口呢?如果用户要求通过手机和PC的查询条件或查询结果不一样,此时就需要定义两个Controller课程查询接口,每个接口定义VO对象与前端传输数据。
手机查询:根据课程状态查询,查询结果只有课程名称和课程状态。
PC查询:可以根据课程名称、课程状态、课程审核状态等条件查询,查询结果也比手机查询结果内容多。
此时,Service业务层尽量提供一个业务接口,即使两个前端接口需要的数据不一样,Service可以提供一个最全查询结果,由Controller进行数据整合。
如下图:
我业务层返回五个数据,vo只管封装就行了,你需要几个数据封装成对应的vo
如果前端的接口没有多样性且比较固定,此时可以取消VO,只用DTO即可。
如下图:
关于swagger的使用
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口,描述一个controller的接口
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
后端人员设计接口,写接口文档,交给前端人员,协同开发
这个接口文档可以swagger自动生成,这个swagger也可以发一些数据,只不过不能保存测试用的数据,所以我们想要保存测试用的数据,可以用httpclient,而且idea下载这个插件可以很方便的测试
前后端联调:
前端后端人员并行开发,后端接口和前端都开发完成之后
前端真正的向接口发请求
如果显示有问题 去翻接口设计需求文档 如果后端返回的数据没有问题和接口文档一致 那就是前端显示数据的问题,如下是在浏览器真正通过前端工程访问返回的数据,只不过用json格式化工具,这样好观察
JSR303
前端请求后端接口传输参数,是在controller中校验还是在Service中校验?
答案是都需要校验,只是分工不同。
Contoller中校验请求参数的合法性,包括:必填项校验,数据格式校验,比如:是否是符合一定的日期格式,等。
Service中要校验的是业务规则相关的内容,比如:课程已经审核通过所以提交失败。
Service中根据业务规则去校验不方便写成通用代码,Controller中则可以将校验的代码写成通用代码。
早在JavaEE6规范中就定义了参数校验的规范,它就是JSR-303,它定义了Bean Validation,即对bean属性进行校验。
SpringBoot提供了JSR-303的支持,它就是spring-boot-starter-validation,它的底层使用Hibernate Validator,Hibernate Validator是Bean Validation 的参考实现。
所以,我们准备在Controller层使用spring-boot-starter-validation完成对请求参数的基本合法性进行校验。
此接口使用AddCourseDto模型对象接收参数,所以进入AddCourseDto类,在属性上添加校验规则。
如果校验出错Spring会抛出MethodArgumentNotValidException异常,我们需要在统一异常处理器中捕获异常,解析出异常信息。
如果几个接口公用一个dto一个模型类的话,因为不同的接口校验对同一字段的校验规则可能不一样,当然你可以再写一个模型类来解决,但是jsr303提供了分组校验
在接口层传入分组的分类的class 只检测对应分组的字段
当然一个字段可以属于多个组