1、Call to ‘toArray()’ with pre-sized array argument ‘new Integer[list.size()]’
问题:
// 将List转为数组
List<Integer> list = Arrays.asList(1,2,3,4,5,6);
Integer[] array = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(array));
如果这样去将List转为Array,会发现在IDEA中toArray方法下有一条黄色的波浪线,提示:Call to ‘toArray()’ with pre-sized array argument ‘new Integer[list.size()]’
解决:
我们可以将toArray(new Integer[list.size()])变为toArray(new Integer[0]),这样这个黄色的波浪线就会消失。
原因:
大概原因就是因为使用预先确定大小的数组对于并发情况来说是不安全的。
详细参考此文:https://stackoverflow.com/questions/53284214/toarray-with-pre-sized-array
请求返回乱码(unicode码)
问题:
今天在解析json数据的时候得到了一堆这样的数据:{“errNum”:0,“errMsg”:“success”,“retData”:[{“title”:“\u6536\u5e9f\u54c1\u5927\u53d4\u521a\u4e0a\u53f0\uff0c\u5c31\u60e8\u906d\u8bc4\u59d4\u706d\u706f\uff0c\u4f46\u63a5\u4e0b\u6765\u5168\u573a\u90fd\u9707\u60ca\u4e86\uff01”,“url”:“http://toutiao.com/group/6263036756505920002/”,“abstract”:“\u8ba2\u9605\u6211\u83b7\u53d6\u66f4\u591a\u7cbe\u5f69\u5185\u5bb9\uff01”,“image_url”:“http://p1.pstatp.com/list/2f90009a31a7ee8bb15”}]}
解决:
1、直接使用JSONObject.parseObject(str)解析就变为正常字符,然后操作JSONObject对象
JSONObject jsonObject = JSONObject.parseObject(str);
2、使用JSONObject.parseObject(str).toJSONString()转为String即可,这个String数据为正常数据
String resultCur = JSONObject.parseObject(str).toJSONString();
原因:
这是因为,为了更好的传输,json进行了Unicode编码。
总结SpringBoot请求参数校验注解
参考此文:https://blog.csdn.net/sinat_36645384/article/details/123672082
去除字符串空格,校验身份证和手机号方法
hutool
校验身份证号:IdcardUtil类
校验手机号:PhoneUtil类
apache.commons
去除字符串前中后空格:StringUtils.deleteWhitespace()
在开发过程中一定要将捕获的异常再抛出去,不能只记录日志,不然会产生意想不到的问题
public class Demo {
public static void main(String[] args) {
A a = new A();
a.a();
System.out.println("执行a结束");
}
}
public class A {
public void a() {
System.out.println("执行a方法开始");
try {
B b = new B();
b.b();
} catch (Exception e) {
System.out.println("报错了");
}
System.out.println("执行a方法结束");
}
}
public class B {
public void b() {
System.out.println("执行b方法");
int a = 10/0;
}
}
上面的代码我们在B.b方法中抛出了异常,但是调用B.b方法的A.a方法捕获了异常且没有抛出,Demo类中的方法全部运行了,不要在代码中去抑制这些错误,业务报错一定要尽可能的抛出。
分布式事务
如果项目没有引入分布式事务,那一定要将得不到事务控制的方法放在最后执行。这样前面代码的报错我们是可控的,报错了程序就会中断,不会执行最后的方法,这样可以尽可能的保证数据一致性。
SQL中判断两个时间段是否有交集
条件时间:condition.start和condition.end
数据库字段:db.start和condition.end
下面是伪代码:
if (condition.start != null && condition.end != null) {
(condition.start <= db.start and condition.end >= db.start)
or
(conditon.start >= db.start and condition.end <= db.end)
or
(conditon.start <= db.end and conditon.end >= db.end)
} else if (conditon.start != null && condion.end == null) {
condition.start <= db.end
} else if (conditon.start == null && condion.end != null) {
conditon.end >= db.start
} else {
all数据
}
不同基本数据类型进行比较,一定要注意!!!
1、不同基本数据类型比较,总是返回true
2、不同引用包装基本类型比较,总是返回false
3、一个包装一个基本,使用==比较返回true,使用equals返回false
多数据源使用事务会导致多数据源失效
多数据源使用SpringBoot注解@Transactional来保证事务是不行的,只能保证一个数据库的事务。