以下内容参考自下面视频:
https://www.bilibili.com/video/BV1y7411y7am
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
@TableLogic
@ApiModelProperty(value = "逻辑删除 1(true)已删除")
@TableLogic
private Boolean isDeleted;
@Configuration
@MapperScan("com.atguigu.eduservice.mapper")
public class EduConfig {
/**
* 逻辑删除插件
*/
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
}
/**
* 逻辑删除讲师
* @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;
}
使用之前确保在实体类属性上引入了
@Api系列注解
为了使之后项目中的所有模块都能使用Swagger,所以不能配置在一个讲师模块里面,这样其他模块使用还要再配置,所有把Swagger配置再一个公共模块里面,其他模块使用的时候,调用下公共模块就可以了。
在一级模块下,新建二级模块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();
}
}
在service模块中引入下面依赖
<dependency>
<groupId>com.atguigugroupId>
<artifactId>service_baseartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
启动类默认扫描的使本模块下的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);
}
}
访问下面地址即可访问swagger
http://localhost:8001/swagger-ui.html
需要注意的点使如果使用了Swagger,就不要再使用RequeseMapping了,
使用RequeseMapping会导致Swagger不能识别是哪个方式来访问,会把所有的访问方式都列出来
而是使用@GetMapping,@DeleteMapping等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPFBVPah-1594555051935)(…/img/2-1594441316945.png)]
在二级模块common下新建三级模块common_utils
如下所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-peKYc36l-1594555051937)(…/img/4-1594456885355.png)]
接口中定义的是返回结果的状态码
public interface ResultCode {
public static Integer SUCCESS = 20000; //成功
public static Integer ERROR = 20001; //失败
}
定义返回的结果
/**
* 统一返回结果类型
*/
@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;
}
}
<dependency>
<groupId>com.atguigugroupId>
<artifactId>common_utilsartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
//查询讲师表所有数据
@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();
}
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)