2023-12学习笔记

1.@NonNull要手动写无参构造器

这是一个我今天研究了很久的问题,开始不知道原因是在这里,还在那想是不是@Data覆盖了无参构造,结果当然不是。先说下解决历程

1.问题起因

通过@RequestBody接收前端报文的时候报错,大致是说我构造方法有问题

java 复制代码
 (although at least one Creator exists): cannot deserialize from Object value
 (no delegate- or property-based Creator)

我确实加上了注解解决了这个问题,但是咱们不是为了弄懂问题起因吗,就接着研究

java 复制代码
@NoArgsConstructor
@AllArgsConstructor

2.new 一下

不是怀疑构造方法有问题吗,那就写个main方法,new 一下这个对象,中间一个注解一个注解的注释,排除到底是哪个注解影响了。

直到把@NonNull删掉,才发现无参构造方法生效了

3.@NonNull注解的对象 在其形成无参构造函数时,此注解不会默认形成无参构造器(问题就出在这儿)

以前确实踩过@Builder的坑,知道有@Builder的情况下,要手动加@NoArgsConstructor

@AllArgsConstructor注解,这次踩完坑lombok.NonNull记住了也要手动加构造器注解

2.警惕sql中的隐式转换

1.问题起因

2.解决思路

数据库中id是数字型,那传入字符串的时候就会做一个隐式转换。

根据隐式转换的规则,我所有的字符串的类型都会被转换为数字类型 ,那么我的。字符串转换为数字之后就变成了0,所以就会匹配到这个字段为0的记录。

它居然不报错,而是把非数字型的字符串,转换成了0

3.解决办法

我写了个正则限制了一下,这个字段只能传数字。

java 复制代码
    /**
     * 校验字符串是不是整数
     * @param str
     * @return
     */
    public static boolean isNumeric(String str){
        for (int i = str.length();--i>=0;){
            if (!Character.isDigit(str.charAt(i))){
                return false;
            }
        }
        return true;
    }

3.java8中toMap时,value为null时报空指针

hashMap中,key可以为空,value也可以为空

但是今天踩得这个坑,value为空报错了

原因是toMap底层有一个merge方法,可以理解为同类项合并,就是我们每次写toMap时候都会写一个

java 复制代码
(n1, n2) -> n1
java 复制代码
        Map<String, String> map = list.stream().collect(Collectors.toMap(
                Node::getId,
                Node::getName,
                (n1, n2) -> n1
        ));

在它的merge方法里边,有个判断,value为空,就抛异常

java stream collect toMap nullPointException异常_hashmap merge的时候value是空 空指针怎么办?-CSDN博客

既然知道原因了,解决办法就简单了,你可以选择过滤到value为空的,但我是这样写的

java 复制代码
        // 不使用toMap()方法,直接在collect中构建map
        Map<String, String> map = list.stream().collect(
                HashMap::new,
                (m,node) -> m.put(node.getId(),node.getId()),
                HashMap::putAll
        );

4.前端传递参数时,form-data 和 json 的区别

前端传递参数时,form-data 和 json 的区别_前端formdata传参-CSDN博客

先说结论:不管你怎么组合,都不会报错,你确实可以说get请求+json报文

一般get请求,delete请求,前端提交的时候会被拼接为url问号的格式。后端用@RequestParam接

一般Post请求,Put请求,用json报文,后端用@RequestBody接

相关推荐
赵谨言2 小时前
多语种在线语言学习平台LinguaVerse的设计与实现毕业论文
学习
一支蜉蝣2 小时前
Day26 XD安全学习笔记--PHP 应用&模版引用&Smarty渲染&MVC 模型&数据联动&RCE 安全
笔记·网络安全·html·php
東隅已逝,桑榆非晚2 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
欢欢李3 小时前
【LTE L3 笔记 01】LTE空口特点
笔记·无线通信·物理层·lte·空口协议
li星野3 小时前
Regular and Irregular Nouns — One-Page A4 Notes
学习
ZZHow10244 小时前
神经网络与深度学习笔记_Day1
人工智能·pytorch·笔记·python·深度学习·神经网络·机器学习
ACP广源盛139246256734 小时前
选型笔记:HDMI2.1 四进一出切换中继方案 GSV6705@ACP 评估
笔记·硬件架构·硬件工程·视频·国产芯片
Z21-X4 小时前
云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践
运维·笔记·学习·云原生·华为云
1314lay_10074 小时前
ABAP 程序性能优化总结
经验分享·笔记·性能优化
视觉小萌新16 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list