前言
在实际开发过程中,我们的服务会分为很多个模块,这样分的好处是,系统维护的复杂性大大降低,以及编码时接口的规范性,便于我们方便阅读代码,理清项目的各个模块所负责的功能。比如我们使用swagger测试接口,是不是会在很多个模块进行使用,这样我们可以把它单独放在一个模块,其他模块要使用的时候,直接来拿,这样是不是大大简化了开发配置,以及提高了开发效率,再比如,你文件上传,和用户信息CRUD都放在一个模块开发,是不是感觉不合适,微服务的思想:有多个服务,把一个项目拆分成多个独立的服务,多个服务是独立运行的,每个服务占用独立的进程。 所以能拆即拆,模块化开发的思想设计。
在父工程中parent模块下创建子模块common
也是一个空的Maven项目,创建方式和service模块一样,删除src全部。
在common模块下创建comon_utils子模块
主要是公共部分对后台数据返回值进行统一封装,这样其他模块也使用的时候,直接来取就好了,创建也是一个空的Maven项目,不过创建的时候注意项目路径,有时候idea可能找的不对,创建的时候需要手动修改。
比如这个路径:F:\SpringBoot_Project\itydf_parent\common_utils 这样就不对,应该是F:\SpringBoot_Project\itydf_parent\common\common_utils 还有一级目录common,这样才对,那就手动修改地址。
修改之后finish生成的结构如下,打开pom.xml文件,这里是不对的。(反正我生成的不对,需要修改红色箭头这两处)
修改成如下,就是artifactId节点应该是common模块,relativePath路径、common_utils模块下面没有模块了,所以应该不用添加了,直接删除
<parent>
<artifactId>common</artifactId>
<groupId>com.itydf</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
为common模块的pom.xml文件添加依赖,提供给comon_utils子模块使用
common_utils模块可能创建的时候不会引入,手动添加一下。
<modules>
<module>common_utils</module>
</modules>
<dependencies>
<!--spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>provided </scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided </scope>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided </scope>
</dependency>
</dependencies>
common_utils下java目录下创建com.itydf.commonutils这个包
返回结果的统一封装
ResultCode.java
***
* 返回结果接口自定义返回状态代码
*/
public interface ResultCode {
public static Integer SUCCESS = 20000; //成功2000
public static Integer ERROR = 2001; //失败2001
}
ResultBean.java
/***
* 返回结果的统一封装
*/
@Data
public class ResultBean {
private Boolean success; //是否成功
private Integer code; //返回状态码
private String message; //返回消息提示
private Map<String, Object> data = new HashMap<String, Object>(); //返回数据
private ResultBean(){}
public static ResultBean ok(){
ResultBean r = new ResultBean();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
return r;
}
public static ResultBean error(){
ResultBean r = new ResultBean();
r.setSuccess(false);
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
return r;
}
public ResultBean success(Boolean success){
this.setSuccess(success);
return this;
}
public ResultBean message(String message){
this.setMessage(message);
return this;
}
public ResultBean code(Integer code){
this.setCode(code);
return this;
}
public ResultBean data(String key, Object value){
this.data.put(key, value);
return this;
}
public ResultBean data(Map<String, Object> map){
this.setData(map);
return this;
}
}
使用测试
在service_user模块中使用common_utils模块已经封装好的统一返回值方法。
<dependencies>
<dependency>
<groupId>com.itydf</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
如下图所示:
CrmUserController.java中编写测试
我们修改上一篇说到的那个查询所有用户信息的接口
/***
* 查询用户所有信息
* @return
*/
@GetMapping(value = "list")
public ResultBean findAll(){
return ResultBean.ok().data("data",crmUserService.list(null)); //无条件,查询所有
}
输入地址:http://localhost:9901/eduservice/crm-user/list,如下也成功了。