1.yml配置文件的问题
yml的书写要求
application.yml 注意事项
在application.yml 文件书写注意:
1. 不同“等级” 用冒号隔开
2. 次等级的前面是空格,不能使用制表符(tab)
3. 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着
最简单验证的方法就是:百度查询相应框架的yml写法
server:
port: 8001
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:com/lys/service/*/mapper/*.xml
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
yml代码书写不规范的时候就会出现以下情况
当yml配置文件书写规范后提示信息就消失了
2.解决完yml配置问文件后又出现了以下问题
发现我的依赖性不太满意,于是追根溯源开始翻查我的注解问题有没有写好,@Service,@Mapper,或者@MapperScan是否有用扫描Mapper中的类。
发现依赖性是没有问题的,最终发现问出现在了一个@SpringbootApplication注解上面,如图所示
我加了@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}),
该注解的作用是,排除自动注入数据源的配置(取消数据库配置),一般使用在客户端(消费者)服务中
也就是说我的配置文件不起作用,相当于我前面解决好问题以后,又挖了一个坑给自己。(蜜汁骚操作)
我查看了@SpringbootApplication注解的内容其中有一个@EnableAutoconfiguration
他实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:
从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;
去重,并将exclude和excludeName属性携带的类排除;
过滤,将满足条件(@Conditional)的自动配置类返回;
3.返回的JSON格式时间出现问题
在yml中加入时间格式,并且当前时区在东八区所以GMT+8
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
4.在写讲师接口的删除讲师时用浏览器无法进行删除
这是因为浏览器只有get提交,对于put和post和delete提交都不能进行测试。可以使用postman进行测试,
但由于这个项目使用B2C模式,有一个后台管理模块和一个前台界面(客户端使用),并且前后端分离开发模式中,api文档是最好的沟通方式。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。(可以在线生成一个API文档)
为了后台管理模块更好的使用,所以可以整合Swagger来进行接口的测试。
5.整合Swagger框架的过程中遇到的问题
创建一个common模块,整合Swagger框架,为了所有框架都能使用。
① 不同模块下的代码引用,需要在pom文件中加入相关的依赖
② 引入依赖以后因为Springboot扫描配置类只会在启动类所在的包及其子包下带有@Component注解所带的类,所以如果要加载Swagger的配置类还得在启动类上加上@ComponentScan扫描包下的所有类
6.统一Json数据格式
Json是由对象和数组构成,因为项目一般都是多个人一起完成的,所以要统一一个返回的Json格式。
//自己定义了一个Json格式
{
"success": 布尔, //响应是否成功
"code": 数字, //响应码
"message": 字符串, //返回消息
"data": HashMap //返回数据,放在键值对中
}
其中对Json的格式构造器进行私有化,防止外界使用调用Json的构造器,体现了面向对象的封装性,其中这并不是单例设计模式,虽然满足了构造器私有化,但单例设计模式还要求对该类实例化对象要求其类型为private static 这样才能满足单例的需求,如下代码。
private R(){}//防止外界调用R的构造方法,只能使用R中的方法来得到R对象
public static R ok(){
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS.getCode());
r.setMessage("成功");
return r;
}
其中代码为了满足链式编程例如R.ok().data;在各个方法的返回值都是return this。这样就能满足每次返回的对象就是调用这个方法的对象。(简单来说谁调用这个方法this就是谁)
public static R ok(){
R r = new R();
r.setSuccess(true);
r.setCode(ResultCode.SUCCESS.getCode());
r.setMessage("成功");
return r;
}
public R data(String key,Object value){
this.data.put(key,value);
return this;
}
7.如何在service_edu中使用这个Json格式
和上面的一样不同模块直接代码的调用需要maven依赖一下,引入commonutils这个依赖
<dependency>
<groupId>com.lys</groupId>
<artifactId>commonutils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
错误:查询所有讲师出了问题,低级错误,原因就是自己代码理论看太多实际太少了,一开始爆红500错误,翻查自己的代码发现用于存储data值的HashMap连对象都没创建!!!
@ApiModelProperty("是否成功")
private Boolean success;//返回是否成功
@ApiModelProperty("状态码")
private Integer code;//返回枚举类中的状态码
@ApiModelProperty("返回消息")
private String message;//返回消息
@ApiModelProperty("返回数据")
private HashMap<String,Object> data = new HashMap<>();//返回数据,存放入键值对中