—— 记于2020年8月31日

前言

从Github上找了一个SpringMVC+Mybatis+Maven的Demo,想从实例入手,学习Spring和Mybatis的相关知识,Demo是16年的,里面依赖的Jar包版本有些旧了,此外Demo作者不够严谨,代码本身也存在一些问题,因此耗费了一些时间。

正文

Demo从链接:springmvc-mybatis-maven 获取。

错误一:

关键报错信息:Java class file version that isn't supported yet
这是在工程启动时遇到的问题,很快就找到的原因,对于1.8版本的jdk,适配的Spring框架是Spring4.x以上版本,Demo中的Spring版本是3.2.3.RELEASE。修改Maven的pom.xml配置后,需要刷新IDEA的cache,操作为:
File -> Invalid caches/Restart..

错误二:

执行mvn package打包命令,日志中报没有测试用例,在单元测试中添加一条永远为真的测试用例即可解决此问题:

  1. @Test
  2. public void testPasses() {
  3. assertTrue(true);
  4. }

错误三:

报ClassNotFoundException,MappingJacksonHttpMessageConverter类找不到,原因是这个类在Spring4.x中被改名为了MappingJackson2HttpMessageConverter,修改名称即可:

  • spring3.x: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
  • spring4.x: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

    错误四:

    关键报错信息:
    java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
    这也是Jar包不匹配,Spring升级到4.x之后,需要对Json库进行升级,可行的操作参考:链接

    错误五:

    新安装的mysql服务版本为8.0.19,JDBC连接一直建立失败,报错信息:Could not get JDBC Connection,需要更新mysql-connector-java依赖的版本,从5.x.x到8.x.x:
    1. <dependency>
    2. <groupId>mysql</groupId>
    3. <artifactId>mysql-connector-java</artifactId>
    4. <version>8.0.21</version>
    5. </dependency>
    修改之后出现如下报错:
    The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents
    解决方法是在jdbc的url连接中指定timezone,解决方法见:链接

    错误六:

    关键报错信息:
    Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: freemarker.template.Configuration.
    原因是spring升级之后,freemarker的版本依赖不匹配,修改方法为更新freemarker版本,从2.3.20到2.3.28:
    1. <dependency>
    2. <groupId>org.freemarker</groupId>
    3. <artifactId>freemarker</artifactId>
    4. <version>2.3.28</version>
    5. </dependency>

修改后的工程

在公司写的,不敢上传代码!!!