记自己日常开发遇到的坑

1.Java时间格式化时YYYY(大写)和yyyy(小写)的有区别   用周的时候记得用YYYY

LocalDateTime previousEndDateTime = LocalDateTime.of(2021, 1, 1, 0, 0);//以2021年1月1日为例
DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy dd");
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("YYYY dd");
String format1 = previousEndDateTime.format(formatter1);// 结果 2020 01
String format2 = previousEndDateTime.format(formatter2);// 结果 2021 01

是不是很神奇,原因y 是Year, Y 表示的是Week year,Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

同样日也有DD和dd的区别,dd表示在该月的天,而DD表示在年中的天,举个栗子,2020年2月1日用yyyy-MM-DD就是 2020-02-32这看着是不是很过分。

如果想去掉前导0,用一个M和d就行。举个栗子,yyyy-M-d ,2020-1-3

2. mysql字段为tinyint(1)类型时界面查不出数据

    原因:mybatis自动把tinyint(1)转成了boolean类型,使匹配不到字段。

    解决方法: 1 数据库弃用tinyint(1) 改成tinyint(2)   

                       2  mapper映射时不用resultType,改用resultMap,指定对应javaBean字段

3. inputStream流只能读一次,第二次读不到数据   所有轻易不要在拦截器中用request.getInputStream() ,会导致Controller中读取不到请求体,至于过滤器中使用,百度有对应解决方法,我没有测试过,拦截器使用还没找到解决方案,有大神知道怎么解决,希望共享下哦

     确实需要读两次时我用的下面方法:

//将InputStream对象转换成ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > -1 ) {
    byteArrayOutputStream.write(buffer, 0, len);
}
byteArrayOutputStream.flush();
//将byteArrayOutputStream可转换成多个InputStream对象,达到多次读取InputStream效果
InputStream inputStreamA = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
InputStream inputStreamB = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

4. (面试可能会问哦)在循环删除list中的某些数据时,只能用iterator迭代器的iterator.remove(),直接在foreach中用list.remove()删除会报异常

    推荐使用 java8 中新出了list.removeIf()方法  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值