毕设の折磨-项目的坑

后端方面

关于Controller层注入Service层报无法自动装配

  • 问题描述:在Controller层中使用@Autowired注解注入Service层的类时,IDEA爆红,提示无法自动装配,代码可正常运行。

  • 解决方法:使用@Resource注解可解决该问题。

拦截器类Interceptor中返回json信息给前端

    Msg msg = Msg.fail().setMsg("未授权,请登录").add("url", request.getContextPath() + "/admin/page/login");
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(msg);
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/json; charset=utf-8");
    try (PrintWriter writer = response.getWriter()) {
      writer.print(json);
    } catch (IOException e) {
      log.error("response error", e);
    }

整合swagger2无法访问接口文档页面

  • 问题描述:配置了mvc:resources标签访问swagger-ui.html依然报404。在github上找到已搭建好的项目,运行后可正常访问swagger-ui.html。尝试将项目中Spring版本升级到5.x,运行后报500,查找资料是jackson版本问题。更换jackson为新版后解决500问题,而后报404。
  • 解决方法:按照网上的资料修改尝试了很久,最后发现是版本的问题,回退2.9.2就解决了。
  • 相关链接:

解决swagger报错404的问题
https://blog.csdn.net/shgzzd/article/details/123793462

swagger2页面无法正常显示

  • 问题描述:

有两个问题,一个是网页弹出:

Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:

一个是能够进入swagger-ui.html,但显示如下信息:

Unable to render this definition
The provided definition does not specify a valid version field.
Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.0.n (for example, openapi: 3.0.0).
  • 解决方法:拦截器配置中添加如下剔除路径

针对问题一:

<mvc:exclude-mapping path="/swagger-ui.html"/>
<mvc:exclude-mapping path="/swagger/**"/>
<mvc:exclude-mapping path="/swagger-resources/**"/>

针对问题二:

<mvc:exclude-mapping path="/v2/api-docs"/>

swagger2对需要验证token的接口进行测试

  • 问题描述:swagger在对接口进行测试时,若接口需要验证身份,则需要在测试接口时携带token进行测试。
  • 解决方法:在需要携带token信息的接口上使用如下注解
@ApiImplicitParams({
	@ApiImplicitParam(paramType = "header", name = "token", required = true),
})
  • 相关链接:

配置Swagger带token的三种方式
https://blog.csdn.net/u022812849/article/details/117374768
@ApiImplicitParam注解
https://www.cnblogs.com/createImage/p/13750443.html

log4j控制台输出中文乱码

  • 问题描述:使用log4j手动输出日志信息到控制台时,中文乱码。log4j.xml配置Encoding为UTF-8。

  • 解决方法:尝试修改系统编码为utf-8,没有效果。只好修改Encoding为GBK。

log4j输出日志时动态显示类名

  • 问题描述:在调用log4j的Logger.getLogger()方法时,可以传入类实现动态显示日志信息,但是在每个需要输出日志方法的类中都需要new一个Logger对象。因此我们考虑将其封装为工具类,在工具类中动态获取调用当前方法的类的类名,实现动态输出日志信息。
  • 解决方法:

获取调用者的类名

String className = Thread.currentThread().getStackTrace()[2].getClassName();

获取调用者的Class。需要注意的是,该方法已被弃用。同时,对于没有参数的getCallerClass()方法对调用者有限制,只有BotropClassLoader和**ClassLoader加载的类可以调用,用户写的类不可调用。

Class clazz = Reflection.getCallerClass(int i);
  • 相关链接:

Reflection.getCallerClass() 方法调用报错
https://www.cnblogs.com/zhongchang/articles/11844015.html
java 获取调用者方法_java获取调用当前方法的方法名和行数
https://blog.csdn.net/weixin_32661831/article/details/114171807
Logger之Logger.getLogger(CLass)
https://www.cnblogs.com/zxf330301/p/5876117.html

Maven使用MyBatis-Generator插件生成代码时报错

  • 问题描述:使用MyBatis逆向工程插件生成代码时,在maven中运行插件,控制台报数据库驱动类的类名,生成失败。
  • 解决方法:在pom文件中导入插件时,不能只导入插件本身,要导入mybatis-generator-core依赖,还要为插件导入数据库驱动依赖。pom如下:
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.1</version>
        </dependency>
        
        <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.1</version>

                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <scope>runtime</scope>
                        <version>8.0.28</version>
                    </dependency>
                </dependencies>
            </plugin>

MyBatis逆向工程生成的xml映射文件中BaseResultMap重复

  • 问题描述:项目运行时页面报500,控制台报:
    java.lang.IllegalArgumentException: Result Maps collection already contains value for **.**.*Mapper.BaseResultMap
    提示BaseResultMap有重复
  • 解决方法:这是因为MyBatis在生成xml映射文件时读取到了其他数据库同同名的表。所以在当前xml文件中以同名表中的字段生成sql语句,导致BaseResultMap重复。
    需要在MyBatis-Generator插件配置文件中<jdbcConnection>标签中添加<property name=“nullCatalogMeansCurrent” value=“true”/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://..."
                        userId="..."
                        password="...">
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
  • 相关链接:

mybatis逆向工程匹配到不同数据库下同名表
https://blog.csdn.net/bing_bg/article/details/105884020

order表的sql执行报错

  • 问题描述:在OrderMapperTest中执行insert方法时,控制台报java.sql.SQLSyntaxErrorException异常,输出异常信息:check the manual that corresponds to your MySQL server version for the right syntax。
  • 解决方法:order表名与关键字冲突,mybatis生成的sql语句中并未对表名做处理,导致表名与关键字冲突,需要手动为每个sql语句的表名的使用``包裹。
  • 相关链接:

Mysql错误:check the manual that corresponds to your MySQL server version for the right syntax
https://blog.csdn.net/qq_44868502/article/details/104197565

部署项目后无法修改resources文件夹下的配置文件

  • 问题描述:在resources文件夹下有一个业务配置文件,允许管理员通过前端修改该文件的内容。使用"classpath:"的方法引入路径只能读取文件内容,无法修改。
  • 解决方法:使用类加载器获取文件路径,使用该路径即可对文件进行读写操作。(具体原因暂不清楚,由群里大佬给出解决方案)
  • 相关链接:

类加载器获取文件路径相关
https://hacther.cn/124.html

FileWriter类写入中文到文件乱码问题

  • 问题描述:前端修改后的配置信息在写入配置文件后中文乱码,导致之后的读取也有乱码。
  • 解决方法:使用BufferedWriter,具体如下:
BufferedWriter fileWriter = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (path), StandardCharsets.UTF_8))
  • 相关链接:

Java FileWriter无法编码utf-8 转换方法
https://blog.csdn.net/liyuxing6639801/article/details/69487712

前端方面

Tymeleaf处理项目根路径的问题

  • 问题描述:使用Thymeleaf模板引擎时需要动态获取项目路径,以便前端页面寻找资源
  • 解决方法:可在标签中添加如下标签,为当前页面所有连接设置项目路径。
<base th:href="${#request.getContextPath()}+'/'">

关于token的保存

localStorage可将数据保存至本地存储,cookieHandler可将数据保存至cookie。

ifram内重定向让父级页面跳转

  • window.location.href、location.href是本页面跳转
  • parent.location.href是上一层页面跳转
  • top.location.href是最外层的页面跳转
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值