一、解读controller 层
1、CommonController 解读
-
@Slf4j --》 简化代码,用于日志输出。
@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解,如果不写下面这段代码,并且想用log 。
private final Logger logger = LoggerFactory.getLogger(当前类名.class);
就可以用@Slf4来代替;这样就省去这段很长的代码。
log.info("进入账单查询接口");
-
@RequestMapping("${server.error.path:$*error.path:/error}}")
开始看到这段注释有点懵啊,server.erroe.path 是啥?
猜想根据之前学的应该是错误路径,error.path:/error是啥? --》 应该是错误页面的位置吧!
后面验证猜想大概都对了。SpringBoot 错误处理机制
-
读了这篇博客之后。我就自己去摸索,读源码,发现 ErrorMvcAutoConfiguration 是SpringBoot错误处理的自动配置类,发现类中有这个方法
@Bean public ErrorPageCustomizer errorPageCustomizer(DispatcherServletPath dispatcherServletPath) { return new ErrorPageCustomizer(this.serverProperties, dispatcherServletPath); }
ErrorPageCustomizer 这个类是错误页面定制器,继续深入。发现ErrorPageCustomizer 中有这个方法
@Override public void registerErrorPages(ErrorPageRegistry errorPageRegistry) { ErrorPage errorPage = new ErrorPage( this.dispatcherServletPath.getRelativePath(this.properties.getError().getPath())); errorPageRegistry.addErrorPages(errorPage); }
ErrorPage应该是错误页面,传入了一个参数,这个参数就是SpringMVC核心控制器dispatcherServletPath获取之前构造的页面路径,然后通过errorPageRegistry添加到errorPgae实例。
-
-
静态变量
NOT_FOUND_TEMPLATE INTERNAL_ERROR_TEMPLATE ERROR_TEMPLATE DEFAULT_ERROR_PATH COULD_NOT_RESOLVE_VIEW_WITH_NAME_PREFIX
这些静态变量是一些错误页面。
ThemeService themeService; ErrorProperties errorProperties; ErrorAttributes errorAttributes; OptionService optionService;
-
themeService: 看到第一个themeService就有点看不懂了,后面终于懂了,原来是作者定义的,里面全是关于模板的一系列操作,例如:获取主题属性、 按绝对路径列出主题文件夹 、 判断模板在指定主题下是否存在等,也就是页面例如error.ftl。
这里有一个小技巧,就是ctrl+鼠标单击,可以查看是,如果有带锁的标志就是源码不能修改,如果没有锁,就是自己定义,可以帮助你解决不少困惑。
-
ErrorProperties: 用于web错误处理的配置属性。
-
ErrorAttributes: 提供给用户访问一些可以记录或显示的错误属性。
-
OptionService: 作者定义的 选择服务接口。
-
-
handleError() 方法:
public void error(String format, Object... arguments);
log.error(): 日志答应的内和格式。
-
boolean isIncludeStackTrace(HttpServletRequest request)
-
void handleCustomException(@NonNull HttpServletRequest request)
处理自定义异常方法。
- 其中Assert抽象类是帮助验证参数的断言实用程序类。
- 其中有三个判断应该是主要内容,
- 第一个判断就是系统抛出的异常,
- 第二个就是判断就是,普通的ServletException根本不会暴露,既不在异常消息中,也不在打印堆栈跟踪中的 。所有通过这个类NestedServletException去继承ServletException,然后派生,将根本原因暴露出来。
- 第一个判断就是通过异常的前缀判断是否是不能解析的视图异常。
-
String getActualTemplatePath(@NonNull String template)
获取页面基础名,这里用到了作者编写的FilenameUtils类,主要功能是对文件名的一些判断。
2、vue的学习
读到这里,我就想着应该是去测试登录页面了,可以在源码中发现没有页面代码,于是摸索了一番,里面用到了vue,对也我这初出茅庐,而且是学后端开发的人来说,前段只是略懂一点,所有,就去学习vue了。
学习vue,首先要把nodejs去了解一下,不是必须,但是有必要。因为这里需要去安装一个vuetools,需要用到包管理工具npm,cnpm (国内)。nodejs安装参考
-
Vue devtools的安装真的是废了我九牛二虎之力,很烦,弄了一个多小时,github上的步骤安装
发现yarn用不了,然后又去装yarn --> npm install -g yarn 。
安装好yarn后,又发现,yarn run build 有问题,最终到时chrome扩展不成功。原来是配置文件名称的问题。
最后终于找到了解决方法 –有关vue devtools安装出现的出错误问题汇总
-
安装好了vue之后,去vue官网学习了一下,vue官网。发现都是学习一些语法,和具体怎么用,没有实战项目练手。记忆点不深刻,后面就放弃了。有兴趣的可以去学习一下,然后找个实现项目练手。博主以后也是要学习的,由于时间原因,先暂时不学。
这里有必要说一下,JsDeliver,CDN内容分发网络,以后肯定会用上的哦。CND介绍