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()方法