SecKill学习初步框架时报错记录
1、使用 Mybatis 逆向生成插件时报错:No plugin found for prefix 'mybatis-generator' in the current project and in the plugin groups
在查看相关插件已经导入的情况下,怀疑插件的问题;直接在IDEA命令行输入命令
mvn org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate
其中,1.3.5是generator插件的版本号。 实现成功build
留存:mybatis逆向生成sql语句的xml配置参考:http://mybatis.org/generator/configreference/xmlconfig.html
2、mysql 对于 DATETIME 格式的字段默认值不允许设置为 '0000-00-00 00:00:00'
报错:Invalid default value for 'start_date';
通过下述语句查询 sql_mode 发现出现 “NO_ZERO_IN_DATE
,NO_ZERO_DATE
” 字样
select @@sql_mode;
可见需要修改配置,将这两个条件剔除。
由于我的 MySQL 放在Linux中,配置文件不是去 my.ini 中修改而是在 “/etc/my.cnf” 中添加如下设置后再重启MySQL服务即可。
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
一般来讲大家好像到这儿就成功了,但是我添加上述语句后重启 MySQL直接重启失败,无奈只能将默认值改为 ‘0001-01-01 00:00:00’ 成功。
参考:https://blog.csdn.net/cozil/article/details/88310014
3、HttpSession无法从域中getAttribute。跨域问题
通过上面的debug可以看到 this.attributes 是有将想存的 key-value 存入的,但一从 setAttribute() 中出来,发现 attributes 为 null 了。
此为跨域问题。往setAttribute() 加入的值,getAttribute() 获取不到。两个Session的地址不同,所以Session中的getAttribute() 方法获取的value为null。
解决方案:
1.对应的js的ajax请求中需要添加:(每个ajax中都需要加此属性,以保证session一致)
xhrFields:{withCredentials:true}
2.controller层注解中加入@CrossOrigin及允许访问的ip,设置allowCredentials为true
@CrossOrigin(origins = "http://localhost:63342", allowCredentials = "true",allowedHeaders = "*")
注意低版本的spring boot 支持 origins 为 '*',即允许所有路径访问,但高版本不行启动时会报错,只能再把 localhost 写出来。
参考1。注解属性解释及配置方式:参考1.1、参考1.2
参考2。高版本spring boot 不能将 origins 直接写成 '*' 的问题: 参考2
4、使用hibernate validator实现自定义validator校验器与全局捕获异常时报错
4.1)首先由于写了全局异常捕获的代码,所以能被controller层处理的异常都有自己对应的异常错误码和错误信息,处理不了的让ExceptionHandler帮我接收,并将异常命名为UNKNOWN_ERROR即“未知错误”。逻辑如下:
public class BaseController {public static final String CONTENT_TYPE_FORMED = "application/x-www-form-urlencoded";//定义exceptionHandler解决未被controller层吸收的exception@ExceptionHandler(Exception.class)@ResponseStatus(HttpStatus.OK)@ResponseBodypublic Object handlerException(Exception ex) {Map<String, Object> responseData = new HashMap<>();if (ex instanceof BusinessException) { //自行设置的枚举异常类BusinessException businessException = (BusinessException) ex;responseData.put("errCode", businessException.getErrCode());responseData.put("errMsg", businessException.getErrMsg());} else {responseData.put("errCode", EmBusinessError.UNKNOWN_ERROR.getErrCode());responseData.put("errMsg", EmBusinessError.UNKNOWN_ERROR.getErrMsg());}return CommonReturnType.create(responseData, "fail");}}
其中 @ResponseStatus(HttpStatus.OK) 的含义为:既然内部异常捕获了就告诉前端后台程序部分没有问题,就算有问题也会告诉你错误信息的。
4.2)自定义的validator校验器如下
@Component
public class ValidatorImpl implements InitializingBean {private Validator validator; //通过 javax 实现的 validator 工具//实现校验方法并返回校验结果public ValidationResult validate(Object bean) {ValidationResult result = new ValidationResult();Set<ConstraintViolation<Object>> constraintViolationSet = validator.validate(bean); //入参:要校验的bean;出参:若违背校验 set 中就会有值if (constraintViolationSet.size() > 0) {//有错误result.setHasErrors(true);constraintViolationSet.forEach(constraintViolation ->{String errMsg = constraintViolation.getMessage(); //违背校验规则的错误信息 + 错误字段String propertyName = constraintViolation.getPropertyPath().toString();result.getErrorMsgMap().put(propertyName, errMsg);});}return result;}@Overridepublic void afterPropertiesSet() throws Exception {//将hibernate validator通过 工厂 的初始化方式使其实例化this.validator = Validation.buildDefaultValidatorFactory().getValidator();}
}
其中,实现了InitializingBean接口会自动进行初始化和其他的静态代码块是异曲同工的。
4.3)service层使用自定义的ValidatorImpl 调用 validate() 方法时返回前端“UNKNOWN_ERROR” 即我自定义异常捕获器中最后一层的兜底异常,通过debug进 validate() 方法发现:
invoke()方法抛出invocationtargetexception var4异常
这个异常的意思是原先的内部异常被包装了一下,在查看其他的代码写的没问题的情况下(看大家遇到过的有没写@Param、sql语句写错等),怀疑是validator 依赖冲突的问题。
此时我只引入了
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.4.Final</version> </dependency>
有看到说缺少javax.validation,那再加上
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version>
</dependency>
走到这儿,问题还是没解决,依旧报上述错误。
解决方案:
将上述两个依赖去除,改为下述依赖即可
<!--校验--> <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator-cdi</artifactId><version>7.0.1.Final</version> </dependency>
参考1:自定义实现Validator:https://www.jianshu.com/p/b3876bf9396c
参考2:依赖问题:https://blog.csdn.net/Lao_gan_ma/article/details/119175862
SecKill学习初步框架时报错记录相关推荐
- 学习笔记——SpringBoot使用nutz框架时报错
学习SpringBoot: 1.Impl文件下,注入dao报错. 1.注入dao时报错: 报错内容:'org.nutz.dao.Dao' that could not be found. 解决:pom ...
- android P OTA差分升级时报错记录
在android P版本中制作出了差分升级包和差分降级包,在执行差分升级时报错,日志如下: [ 7.974280] Verifying current system... [ 7.974298] fa ...
- 关闭工单时报错 订单 XXXX 的未处理将来更改记录阻止删除标记/完成
在QAS 610中 已以下几个工单为例测试 100024656 100024655 100024661 关闭时报错 订单 XXXX 的未处理将来更改记录阻止删除标记/完成 STEP 1: 执行事务码Z ...
- pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests)
pycharm中python调用百度aip所遇问题解决方案记录:pip安装时版本报错以及aip导入时报错no module named aip/requests pip安装时版本报错 pip升级后安装 ...
- 使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错
在使用SpringBoot+MybatisPlus框架的后端项目调用SQL Server的存储过程时报错: Mapper层xml中的代码为: 在命令行调用存储过程时,可以顺利执行,但是在mapper中 ...
- (学习笔记)OrCAD进行DRC时报错以及解决办法
OrCAD进行DRC时报错以及解决办法 1.WARNING(ORCAP-1608):Net has no driving source XXX (信号名) WARNING(ORCAP-1600): N ...
- CV深度学习项目调试开发过程中报错记录【持续更新】
1.加载读取本地数据集报错:can't open/read file: check file path/integrity can't open/read file: check file path/ ...
- 问题记录:jenkins构建时报错The goal you specified requires a project to execute but there is no POM in...
jenkins构建时报错:The goal you specified requires a project to execute but there is no POM in this direct ...
- php接受post值报错,php接收post参数时报错怎么办
php接收post参数时报错的解决办法:首先搜索[php.ini]中 [always_populate_raw_post_data ]:然后将前面的[;]去掉,并重启服务即可. php接收post参数 ...
- python read函数报错_python 使用read_csv读取 CSV 文件时报错
读取csv文件时报错 df = pd.read_csv('c:/Users/NUC/Desktop/成绩.csv' ) Traceback (most recent call last): File ...
最新文章
- matlab练习程序(图像放大/缩小,最邻近插值)
- 数据挖掘流程(四):建模调参
- 深入理解Spark 2.1 Core (四):运算结果处理和容错的原理与源码分析
- java ssl 无证书_java – 如何修复SSL – 没有可用的证书
- 从零开始学习Docker
- 文件和异常 Python
- 构造一个简单的神经网络,以DQN方式实现小游戏的自动控制
- 2016 ICPC 大连网络赛 部分题解
- 求每个月最后一天mysql函数_计算指定年月的最后一天的自定义MYSQL函数_MySQL
- android请求网络接口(xutils3进行网络请求)
- 利用华为DTM将事件发送到Firebase
- BIOS中VT虚拟技术已经开启,但任务管理器中仍显示虚拟化已禁用
- 我养的无名花草,四季开花
- Alphalens笔记
- 《JAVA设计模式系列》责任链模式
- virtualbox 虚拟机 win7 激活后开机黑屏,只有横杠
- Android自定义实现按周签到打卡功能
- 这个春节,小灰收到一件不寻常的礼物
- 陪审团(01背包问题倒推具体方案)
- 【亲测】RMI之Hassion