# gd-iss **Repository Path**: Save-by/gd-iss ## Basic Information - **Project Name**: gd-iss - **Description**: 学会的后台接口 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-12-01 - **Last Updated**: 2022-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工程简介 ## 分包介绍 ### java.com.gdiss.www #### annotation(注解) 可以放置自定义的注解 #### bo(业务封装类) 将entity中读取到的几张表的数据组合起来的一个对象。 比如一个简历BO,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个entity,工作经历对应一个entity,社会关系对应一个entity。 其存在的目的是为了方便自己和其他合作者进行逻辑调用,而不用每次都进行相同的查询与封装。 #### config(配置类) 配置类,其中的配置信息一般情况下不需要修改! 如果一定要修改,必须和该配置类的建立者协商清楚,同时通知其他开发者此处进行了修改,并说明修改的理由与对应的影响。 #### constant(公共常量类) 公共常量类 有需要可以添加,尽量不用删除 #### controller(接口层) API接口定义类 定义各接口的 - URL - 请求参数与响应参数 - 请求方式如GET、POST **(尽量不要在controller层放置业务代码)** #### dto(数据传输类) 数据传输对象 这里可以放置 - 需要存储在redis中的对象,如UserMessageDto #### entity(实体类) 实体类 一个类一般对应一张数据库表 可以手动建,也可以使用test.auto包下的代码生成工具自动扫描表结构生成对应的类 #### filter(过滤器) 过滤器 #### handler(处理类) 处理类 #### mapper(持久层)(逻辑与dao一致) 数据访问层,又称持久层 其中封装对数据库的访问:增删改查 可以使用test.auto包下的代码生成工具生成对应的类 mybatis-plus有封装一些常用的方法,闲麻烦的可以直接使用 如果需要使用自定义SQL,这里提供了注解与xml两种形式,可以选择你喜欢的方式(不过建议都写在注解上,反正我是懒得看xml的) #### point(处理类) 处理类 效果与handler类似 #### service(业务层) 包内放置各业务的接口 ##### impl(业务实现类) 对应接口的具体实现类 其中包含业务的具体逻辑代码 #### util(工具类) 工具类 放置公共的工具方法,不同的工具封装成不同的类 #### vo(值封装类) 值封装类 包下的ResultVo为统一的响应返回格式,正常情况下不需要进行修改 ##### request(请求封装类) 请求参数的封装类 如LoginRequest为登录的请求参数封装类 ##### response(响应数据封装类) 响应数据的封装类 API接口的响应结果的封装对象,如登录接口的响应结果中存在data部分(除ResultVo.code与ResultVo.msg之外的数据),则将其封装为LoginResponse #### websocket(接口类) websocket接口 ### resources(资源包) #### mapper(xml资源) 这里有mapper层对应的xml文件 #### application.yml(springboot的全局配置) ## 其他细节 ### 前端参数格式校验(这里以注册为例) 1. 查看`FormatConstant`类中是否有对应符合要求的格式正则,没有则添加 ```java //如下 /** * 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线) */ public static final String PASSWORD = "^[a-zA-Z]\\w{5,17}$"; ``` 2. 封装前端的请求参数,并使用注解标记各参数需要的格式 ```java import com.xxx.www.constant.FormatConstant; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; /** * 注册请求类 * @author xxx * @date 2021/1/1 */ @Data @NoArgsConstructor @AllArgsConstructor public class RegisterVo { @NotEmpty//非空 @Pattern(regexp = FormatConstant.PHONE_NUMBER)//使用自定义的PHONE_NUMBER正则进行校验 private String phoneNumber; @NotEmpty//非空 @Email//邮箱格式 private String email; @NotEmpty//非空 private String emailCode; @NotEmpty//非空 @Pattern(regexp = FormatConstant.USER_NAME)//使用自定义的USER_NAME正则进行校验 private String username; @NotEmpty @Pattern(regexp = FormatConstant.PASSWORD)//使用自定义的PASSWORD正则进行校验 private String password; } ``` 3. 在请求参数封装类前添加`@Valid`注解 ```java //接口样式如下 @PostMapping(value = "/register")//POST请求,url为/register(如果类上有配置mapping则为两者拼接,如/user/register) //@PreAuthorize("permitAll()")//security配置该接口的访问权限为允许所有,即不拦截任何用户 public ResultVo register(@RequestBody/*json字符串存在于请求体中*/ @Valid/*标记这里需要校验*/ RegisterVo registerVo){ //调用service层的业务代码 return userService.register(registerVo); } ``` # 延伸阅读