laoazhang

laoazhang

An Open Web advocate and front-end engineer and back-end engineer, who loves everything mobile, and writes about HTML5, CSS, JS, TS, JAVA, PYTHON, tech events, gadgets, etc.

Twitter Facebook LinkedIn Instagram Github

常犯的错误

1、在进行test测试时错误

  • 在进行test测试时候,需要加载resources中的配置文件,则需要在test包重新导入一份,因为test无法访问到java中的resources文件

2、SpringBoot项目@tableid注解设置IdType.AUTO不生效的解决方法

  • 我要做的就是将Mysql记录的自增值重置一下
  • 先删除之前插入的那条脏数据
  • 再在mysql数据库中执行:ALTER TABLE 库名.表名 AUTO_INCREMENT = 0;

3、log4j日志,test测试打印日志看不到问题

  • 左侧找到具体的test方法,选中,则可以看到具体方法的debug日志

4、BeanUtils.copyProperties() 详解

  • BeanUtils.copyProperties会进行类型转换;
  • BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制。如果 两个对象之间存在名称不相同的属性,则 BeanUtils 不对这些属性进行处理,需要程序手动处理。
  • 这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。
 org.springframework.beans.BeanUtils
a拷贝到b
a,b为对象
BeanUtils.copyProperties(a, b);
org.apache.commons.beanutils.BeanUtils
b拷贝到a
a,b为对象
BeanUtils.copyProperties(a, b);

5、Test测试,mapper读取不到时,有可能是test引入包路径错误

平常引用的是import org.junit.Test;

新版本,JUint5,采用的是jupiter包import org.junit.jupiter.api.Test;

6、Docker容器中,项目启动正常,但是访问不到容器内的数据库,数据库远程连接正常,本地运行能连接,问题解决

经过排查,不是容器的问题,也不是docker网络的问题,也不是mysql的问题,也不是项目的问题,而是,防火墙开启,数据库3306端口设置状态为DROP,不是ACCEPT,所以,项目内部无法访问数据库,修改后,问题即可解决

解决方法:

Linux防火墙开放端口方法

7、Docker中mysql8.x版本容器部署后,项目中有些sql无法执行

经过排查,是因为sql模式的问题,发现从 MySQL 5.7.5 开始,默认 SQL 模式包括 ONLY_FULL_GROUP_BY。 (在 5.7.5 之前,MySQL 不检测函数依赖,并且默认不启用 ONLY_FULL_GROUP_BY)这可能会导致一些sql语句失效

# 通过 语句查询
select @@global.sql_mode  

# 查询后  查询结果包括ONLY_FULL_GROUP_BY

#窗口临时修改 需要注意的是,该修改仅在该次(窗口)有效,只是临时修改

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

# 永久解决需要在my.cnf配置文件中添加一行配置  (这个配置有坑,mysql8.x版本不适用)
[mysqld] 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 这个是正确配置 
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# 修改完,重启mysql容器即可

MySQL报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column whic_磊哥的小迷妹的博客-CSDN博客

在my.cnf配置完成之后,启动不成功,自定义配置文件一直不生效,启动报错 原因是,上述文档中,给的sql_mode设置有问题,mysql8.x版本删除了NO_AUTO_CREATE_USER 已废除该模式

正确的设置为

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

mysql 8.0下的SELECT list is not in GROUP BY clause and contains nonaggregated column_51CTO博客_MySQL 8.0

8、后端项目解决跨域问题,前端没有进行跨域,无法访问后端项目接口

解决方法:第一种添加过滤器

package com.zf.common.security.filter;

import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 后端解决跨域
 */

@Component
public class CrosFiter implements Filter {
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, accessToken, token");
        filterChain.doFilter(servletRequest, servletResponse);
    }
 
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

前后端解决跨域五种方案_前后端跨域_努力的小白o的博客-CSDN博客

解决跨域第二种方式

package com.zf.common.security.filter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        // 放行哪些原始域
        config.addAllowedOrigin("*");
        // 是否发送Cookie
        config.setAllowCredentials(true);
        // 放行哪些请求方式
        config.addAllowedMethod("*");
        // 放行哪些原始请求头部信息
        config.addAllowedHeader("*");
        // 暴露哪些头部信息
        config.addExposedHeader("*");
        // 2. 添加映射路径
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);}
}

【Java】Java中解决跨域问题的几种方法(建议收藏)

9、后端SpringBoot项目返回接口有乱码问题

方案一properties文件中配置字符编码格式强烈推荐

properties文件中加入以下配置强制指定Servlet编码格式为UTF-8

server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8

# application.yml开发环境配置
server:
  servlet:
    encoding:
      force: true
      charset: UTF-8

方案二注解@RequestMapping添加produces属性

  在使用注解@RequestMapping@GetMapping或者@PostMapping的时候增加produces属性解决响应报文中文乱码问题

@GetMapping(value ="/getResultById", produces = "application/json; charset=utf-8")

解决Spring Boot项目后端接口返回数据中文乱码问题 - 楼兰胡杨 - 博客园

10、for循环中,return结束循环,继续运行方法下面的内容

return在for循环中不起作用,我们如果要结束方法,不在进行下面内容的运行,可以 throw new RuntimeException("该信息重复添加,重复卡号:"+oldKaku.getCardNo());



comments powered by