SpringBoot实战-(4)讲师逻辑删除,集成swagger,统一结果返回

以下内容参考自下面视频:

https://www.bilibili.com/video/BV1y7411y7am

1.格式化时间

#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

2.逻辑删除

2.1 添加注解

@TableLogic

@ApiModelProperty(value = "逻辑删除 1(true)已删除")
@TableLogic
private Boolean isDeleted;

2.2 配置插件

@Configuration
@MapperScan("com.atguigu.eduservice.mapper")
public class EduConfig {
    /**
     * 逻辑删除插件
     */
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }
}

2.3 controller层调用

 /**
     * 逻辑删除讲师
     * @param id
     * @return
     * @ApiOperation(value = "逻辑删除讲师") 定义在方法上,对swagger进行解释
     * @ApiParam(name = "id",value = "讲师ID",required = true) 定义在参数上,对swagger进行解释
     */
    @ApiOperation(value = "逻辑删除讲师")
    @DeleteMapping("{id}")
    public boolean removeTracher(@ApiParam(name = "id",value = "讲师ID",required = true) @PathVariable String id){
        boolean flag = teacherService.removeById(id);
        return flag;
    }

3.集成Swagger

使用之前确保在实体类属性上引入了

@Api系列注解

为了使之后项目中的所有模块都能使用Swagger,所以不能配置在一个讲师模块里面,这样其他模块使用还要再配置,所有把Swagger配置再一个公共模块里面,其他模块使用的时候,调用下公共模块就可以了。

项目结构图如下
SpringBoot实战-(4)讲师逻辑删除,集成swagger,统一结果返回_第1张图片

3.1 创建配置类

在一级模块下,新建二级模块common,在二级模块二级模块common下,新建三级模块common_base,在common_base下新建SwaggerConfig类

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();
    }

    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-课程中心API文档")
                .description("本文的描述了课程中心微服务接口定义")
                .version("1.0")
                .contact(new Contact("java","http://atguigu.com","[email protected]"))
                .build();
    }
}

3.2 在本模块引入Swagger

在service模块中引入下面依赖

<dependency>
    <groupId>com.atguigugroupId>
    <artifactId>service_baseartifactId>
    <version>0.0.1-SNAPSHOTversion>
dependency>

3.3 配置启动类

启动类默认扫描的使本模块下的Config,要使用其他模块的Config,需要添加@ComponentScan(basePackages = {“com.atguigu”})注解

@SpringBootApplication
@ComponentScan(basePackages = {"com.atguigu"})
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class,args);
    }
}

3.4 测试

访问下面地址即可访问swagger

http://localhost:8001/swagger-ui.html

需要注意的点使如果使用了Swagger,就不要再使用RequeseMapping了,

使用RequeseMapping会导致Swagger不能识别是哪个方式来访问,会把所有的访问方式都列出来

而是使用@GetMapping,@DeleteMapping等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPFBVPah-1594555051935)(…/img/2-1594441316945.png)]

4.统一结果返回

4.1 新建模块

在二级模块common下新建三级模块common_utils

如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peKYc36l-1594555051937)(…/img/4-1594456885355.png)]

4.2 新建ResultCode接口

接口中定义的是返回结果的状态码

public interface ResultCode {
    public static Integer SUCCESS = 20000;  //成功
    public static Integer ERROR = 20001;  //失败
}

4.3 新建R类

定义返回的结果

/**
 * 统一返回结果类型
 */
@Data
public class R {
    @ApiModelProperty(value = "是否成功")
    private Boolean success;

    @ApiModelProperty(value = "返回码")
    private Integer code;

    @ApiModelProperty(value = "返回消息")
    private String message;

    @ApiModelProperty(value = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();

    //把构造方法私有
    private R() {}

    /**
     * 成功和失败的静态方法
     * 构造方法私有‘
     * 外界只能通过成功和失败的静态方法来访问该类
     */
    public static R ok(){
        R r = new R();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;
    }

    public static R error(){
        R r = new R();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失败");
        return r;
    }

    /**
     * 链式编程
     */
    public R success(Boolean success){
        this.setSuccess(success);
        return this;
    }
    public R message(String message){
        this.setMessage(message);
        return this;
    }
    public R code(Integer code){
        this.setCode(code);
        return this;
    }
    public R data(String key,Object value){
        this.data.put(key,value);
        return this;

    }
    public R data(Map<String,Object> map){
        this.setData(map);
        return this;
    }
}

4.4 导入service模块

<dependency>
    <groupId>com.atguigugroupId>
    <artifactId>common_utilsartifactId>
    <version>0.0.1-SNAPSHOTversion>
dependency>

4.5 修改Controlelr层

//查询讲师表所有数据
@ApiOperation(value = "查询全部讲师")
@GetMapping("findAll")
public R findAllTeachers() {
    List<EduTeacher> list = teacherService.list(null);
    return R.ok().data("items", list);
}

/**
 * 逻辑删除讲师
 *
 * @param id
 * @return
 * @ApiOperation(value = "逻辑删除讲师") 定义在方法上,对swagger进行解释
 * @ApiParam(name = "id",value = "讲师ID",required = true) 定义在参数上,对swagger进行解释
 */
@ApiOperation(value = "逻辑删除讲师")
@DeleteMapping("{id}")
public R removeTracher(@ApiParam(name = "id", value = "讲师ID", required = true) @PathVariable String id) {
    boolean flag = teacherService.removeById(id);
    return flag ? R.ok() : R.error();
}

4.6 测试

on(value = “逻辑删除讲师”)
@DeleteMapping("{id}")
public R removeTracher(@ApiParam(name = “id”, value = “讲师ID”, required = true) @PathVariable String id) {
boolean flag = teacherService.removeById(id);
return flag ? R.ok() : R.error();
}


#### 4.6 测试

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200712195929631.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NudXdzbg==,size_16,color_FFFFFF,t_70#pic_center)

你可能感兴趣的:(springboot)