开发中一些常见Exception总结

1.java.lang.IllegalArgumentException: Cannot format given Object as a Date:无法无法将给定对象格式化为日期

2.org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
这个异常是结果太多异常,就比如一个orderCode(订单号)在主表中就应该对应一个uid(结果),但是这里出现了两个。

3.org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘userName’ not found. Available parameters are [param7, param8, param5, param6, param9, param3, param4, param1, param2, 0, 1, 2, 3, 4, 5, 6, 7, 8, param10, 9, param11, 10]
这个异常说白了,就是在mapper接口中的查询方法的参数没有@Param,并且在mapper.xml中没有给parameterType参数。

4.java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
这个异常是下标越界异常,就是数组(一般是list)的值没有获取到。需要检查sql语句了。此时get()就会报此异常。

5.InvalidkeyException:Invalid AES key length: 6 bytes.(无效的AES密钥长度:6字节)
这个异常就是说秘钥长度不对,此时的长度为6。

6.java.lang.NumberFormatException: For input string: “Chen558716”
这个异常就是说在字符串在转换成数字类型的时候发生的异常,因为必须是纯数字的字符串才能转换。这里是我在接口的入口取值去错了,取得是password对应的值:“Chen558716”,这个值就转换不了,此时就会抛这个异常。

7.org.hibernate.exception.LockAcquisitionException:数据库出现死锁。
解决方式:每执行一次就flush()一下。
—https://blog.csdn.net/tammy_zhu/article/details/5718575

8.java.lang.ClassCastException: com.ziroom.zhumo.pojo.DO.MakeUpBudgetPageDO cannot be cast to java.util.Map:这个异常是在用jpa做查询,并且数据表没有映射实体类的情况下,在手动映射字段的时候,字段不一致导致的。

9.Adding transactional method ‘findAll’ with attribute: PROPAGATION_REQUIRED:没有加事物注解

10.org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value element [6] did not match expected type [java.lang.Long (n/a)];
数名是数据库中字段的类型与映射的实体类中属性类型不一致导致的。

11.org.springframework.security.authentication.InternalAuthenticationServiceException: 权限那边的异常,
子类异常:
UsernameNotFoundException 用户找不到
BadCredentialsException 坏的凭据
AccountStatusException 用户状态异常它包含如下子类
AccountExpiredException 账户过期
LockedException 账户锁定
DisabledException 账户不可用
CredentialsExpiredException 证书过期

12.一个jpa或者hibernate使用中的异常信息:ids for this class must be manually assigned before calling save():
说明在保存信息的时候,实体类中ID属性使用主键自增注解(@GeneratedValue(strategy = GenerationType.IDENTITY))。

13.io.lettuce.core.RedisCommandTimeoutException: Command timed out。
原因:是连接redis超时,解决办法是配置一下spring.redis.timeout=5000或者更大一些。

14.org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) (through reference chain: com.ziroom.common.util.Resp[“data”]->java.util.ArrayList[0]->java.util.HashMap[“null”])"
原因:map的key为null的时候,不可以转换成json格式。
注意:我遇到的只有使用jackson转换的时候,才会报这个错。用fastJson就不会报错。

15.一、报错信息:
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/ROOT] is not valid

1.该异常是如何产生的:
我是通过postman,发送一个post请求,导致该异常的。从上面的异常信息来看,是因为该目录[/tmp/tomcat.1428942566812653608.8090/work/Tomcat/localhost/ROOT],不存在导致的。

2.该异常为何会产生:
我的应用中没有文件上传,为啥会抛org.springframework.web.multipart.MultipartException异常
2.1)首先,我们应该知道,对于http POST请求来说,它需要使用这个临时目录来存储post数据。
2.2)其次,因为该目录是挂在到/temp目录下的临时文件,临时目录作为文件上传的临时目录,但是该目录会在10天之后被系统自动清理掉。

三、解决方案:
1、最简单的方法是,重启项目,我也是采用的这种;
2、在application.yml文件中设置multipart location ,并重启项目

3、添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启

16.com.sun.proxy.$Proxy313 cannot be cast to org.hibernate.query.internal.NativeQueryImpl:在多线程调用或者是在dubbo(分布式服务)调用时会抛这个转换异常;
解决方案:
(1)在持久化层的接口上面加个事物注解(最好选择)
(2)就是使用在hibernate5.2 之后已经作废的SQLQuery.class可以避免这个问题。

17.java.lang.IllegalArgumentException: Not a managed type:说明项目扫描不到@entity和@Resposity,从而spring容器不能创建对象。

18.SpringBoot项目启动:Failed to start component [Connector[HTTP/1.1-8080]]:端口号冲突。
两种解决办法:
(1)在项目中配置:server.port.8081
(2)在电脑上查看java进程,然后杀死进程。

19.报错:
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

分析:
spring boot 内置tomcat默认的上传文件大小为:1M

方案一:
在配置文件中加以下参数
spring:
servlet:
multipart:
max-file-size: 100MB # 单个文件大小
max-request-size: 100MB # 设置总上传的数据大小
enabled: true #开启

注意 :低版本的springBoot项目中是用http替换servlet的,高版本的用servlet。具体查看文档。

方案二:
在启动application类中添加以下代码
/**
* 文件上传配置
* @return
*/
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大
factory.setMaxFileSize(“100MB”); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize(“100MB”);
return factory.createMultipartConfig();
}

21.java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
原因:JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值