我们在更新数据时,有的数据是不能够被修改的。假设User有三个字段,username,age,password。...r那么我们直接进行更新操作,会导致密码变为空。 解决方案有以下两种: (1)将所需的password用隐藏域传过来。但是这种做法当有很多不必修改的字段时很麻烦。...(2)取出数据库中的password字段,重新为新建的user对象的password赋上值,这种操作也很麻烦。...我们可以直接将不必修改的数据进行赋值。 需要注意的是:被@ModelAttribute标注的方法会在每个目标方法执行之前被springmvc所调用。...运行流程: (1)执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放到Map中; (2)springmvc从Map中取出Person对象,并把表单的请求参数赋给该Person
本文将探讨 issue #80 中提出的技术问题及其解决方案。该问题主要涉及如何在模型的 _encode_params 方法中处理列表作为字典值的情况。...问题背景在处理用户提交的数据时,有时需要将字典序列化为 URL 编码字符串。在 requests 库中,这个过程通常通过 parse_qs 和 urlencode 方法实现。...然而,当列表作为字典值时,现有的解决方案会遇到问题。...这是因为在 URL 编码中,列表值会被视为字符串,并被编码为 “%5B%5D”。解决方案为了解决这个问题,我们需要在 URL 编码之前对字典值进行处理。一种可能的解决方案是使用 doseq 参数。...结论本文讨论了 issue #80 中提出的技术问题,即如何在模型的 _encode_params 方法中处理列表作为字典值的情况。
我们来模拟一个实际的应用场景,假设小二现在要从数据库中获取一个姓名的列表,然后将姓名打印到控制台,对应的代码如下。...return null; } } 由于 getNamesFromDB() 方法返回了 null 来作为没有姓名列表的标志,那就意味着在遍历列表的时候要先对列表判空,否则将会抛出 NPE 错误,不信你把...假如不能理解的话,我再写一个返回可变的空列表的示例,你对比着感受一下就理解了。...你看,Collections.emptyList() 和 new ArrayList() 都可以替代 null,来减少打印列表时不必要的判空以及那个讨厌的家伙——NPE。...;Optional 类提供了很多专业的方法而不用显式进行空值检查,从而巧妙地消除了 NPE。
不过自从这个规矩实施以来,线上的NPE就渐渐的少了,从最初的一个月团建一次到最后的半年团建一次。大家写代码都比较谨慎了,只要用到对象或者集合的时候二话不说上来先判空,所以产生的NPE就少了。...业务中返回结果的空值 在我们常见的业务开发中是不是经常会有这样的接口: package com.workit.demo.nullexcption; import com.workit.demo.proxy.User...User getUserById(@NotNull Integer id); 其他需要注意的NPE switch中的空指针异常 看下面的列子妥妥的NPE public static void main...详细介绍可以阅读以前文章《Java采坑记》 使用 java.util.stream.Collectors 类的 toMap()方法注意value为空时 如果项目里面就是有null值怎么办呢?...使用 Collection 接口任何实现类的 addAll()方法时,都要对输入的集合参数进行NPE 判断。
不过自从这个规矩实施以来,线上的NPE就渐渐的少了,从最初的一个月团建一次到最后的半年团建一次。大家写代码都比较谨慎了,只要用到对象或者集合的时候二话不说上来先判空,所以产生的NPE就少了。...业务中返回结果的空值 在我们常见的业务开发中是不是经常会有这样的接口: package com.workit.demo.nullexcption; import com.workit.demo.proxy.User...User getUserById(@NotNull Integer id); 其他需要注意的NPE switch中的空指针异常 看下面的列子妥妥的NPE public static void main...使用 java.util.stream.Collectors 类的 toMap()方法注意value为空时 ? 如果项目里面就是有null值怎么办呢?...使用 Collection 接口任何实现类的 addAll()方法时,都要对输入的集合参数进行NPE 判断。 ? 三目运算符可能产生NPE ?
【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。...集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...对于 Session 中获取的数据,建议进行 NPE 检查,避免空指针。 级联调用 obj.getA ().getB ().getC (); 一连串调用,易产生 NPE。...哪些用法可能造 NPE 相关的 BUG? 在业务开发中作为接口提供者和使用者如何更有效地避免空指针呢? 2....实际编写代码时,产生空指针的原因都是这些情况或者这些情况的变种。 《手册》中的另外一处描述 “集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。” 和第 4 条非常类似。
的方法,并将方法的返回值放到模型数据中 (类似于上述的第二步) 执行指定的方法,如果入参有@ModelAttribute,则将(1)中放置于模型数据中的对象赋值给入参的绑定对象 根据HTTP请求继续对绑定对象进行填充和覆盖...} return "/user/showUser"; } } 上面在向handle4发送请求时,抛异常,因为@ModelAttribute...和 @SessionAttributes的处理遵循一个流程: 1、SpringMVC 在调用处理方法前,在请求线程中自动创建一个隐含的模型对象 2、调用所有方法上标注了@ModelAttribute的方法...) 5.将绑定错误信息、校验错误信息都保存到隐含模型中 6.本次请求的对象模型数据放到HTTPServletRequest的属性列表中,暴露给视图对象 7.视图对象对已经放在HTTPServletRequest...属性列表的模型数据进行渲染 8.把渲染后的HTTP响应报文发送给客户端
本文将探讨 issue 80 中提出的技术问题及其解决方案。该问题主要涉及如何在模型的 _encode_params 方法中处理列表作为字典值的情况。...问题背景在处理用户提交的数据时,有时需要将字典序列化为 URL 编码字符串。在 requests 库中,这个过程通常通过 parse_qs 和 urlencode 方法实现。...然而,当列表作为字典值时,现有的解决方案会遇到问题。...这是因为在 URL 编码中,列表值 [](空括号)会被视为字符串,并被编码为 "%5B%5D"。解决方案为了解决这个问题,我们需要在 URL 编码之前对字典值进行处理。...结论本文讨论了 issue 80 中提出的技术问题,即如何在模型的 _encode_params 方法中处理列表作为字典值的情况。
NPE发生在试图对一个null对象调用方法或访问其成员变量时。这种错误往往会导致程序崩溃,并且调试起来可能非常棘手。在本篇文章中,我们将深入探讨NPE的成因,并学习如何有效地解决和预防这种错误。...NPE的成因与原理 什么是null? 在Java中,null是一个特殊的字面量,它表示一个对象的“缺失”或“空值”。当一个变量被初始化为null时,它并不指向任何对象的内存位置。...NPE的典型场景 未初始化的对象:试图访问一个尚未被初始化的对象。 对象被显式设置为null:在代码中某处,变量被设置为null,后续操作未进行空值检查。...NPE的成因与原理 什么是null? 在Java中,null是一个特殊的字面量,它表示一个对象的“缺失”或“空值”。当一个变量被初始化为null时,它并不指向任何对象的内存位置。...NPE的典型场景 未初始化的对象:试图访问一个尚未被初始化的对象。 对象被显式设置为null:在代码中某处,变量被设置为null,后续操作未进行空值检查。
后续若也没有为该变量赋值,则当使用这个变量里的内容时,便会抛出 NPE。...对空对象调用静态方法或类方法时,不会报 NPE,因为静态方法不需要实例来调用任何方法; 访问或更改空对象上的任何变量或字段时; 抛出异常时抛出 null; 数组为 null 时,访问数组长度; 数组为...避开 NPE 的建议 这节将介绍如何在开发过程中避开 NPE 的一些建议。...避免返回 null,而应是空集合或空数组 返回空集合或空数组时,可以保证调用方法(如 size()、 length())不会出现 NPE。...空对象是设计的一种特殊实例,为方法提供默认的行为,例如 Collections中的 EMPTY_List,我们仍能使用它的 size(),会返回 0,而不会抛出 NPE。
,编译时检查避免NPE所有类型默认都是不可空的,除非特意用?...标记它是可空的。这样,Kotlin可以在编译时帮助我们捕捉潜在的NPE,而不是等到代码运行时才发现。...相比Java中的if-else空检查,这样的写法很简单、易读。...六、Kotlin 的优势总结综上总结,Kotlin通过编译时的空检查、可空类型支持和安全调用等功能,几乎不会发生了NPE的发生。Java虽然引入了Optional类解决空值问题,但整体语法很繁琐。...在日常开发中,Kotlin让代码更流畅、更安全,从Java转向Kotlin的开发者可以充分体验到空安全特性的便捷,减少了处理空值所带来的麻烦。
可以定义多个方法,不同的方法处理不同的异常,例如专门处理空指针的方法、专门处理数组越界的方法......全局数据绑定 全局数据绑定功能可以用来做一些初始化的数据操作,我们可以将一些公共的数据定义在添加了 @ControllerAdvice 注解的类中,这样,在每一个 Controller 的接口中,就都能够访问导致这些数据...注解标记该方法的返回数据是一个全局数据,默认情况下,这个全局数据的 key 就是返回的变量名,value 就是方法返回值,当然开发者可以通过 @ModelAttribute 注解的 name 属性去重新指定...(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) { System.out.println(book);...,在方法中,给参数添加一个 b 前缀,即请求参数要有b前缀. 3.发送请求 请求发送时,通过给不同对象的参数添加不同的前缀,可以实现参数的区分. ?
NPE场景虽然说NPE场景容易排查容易解决,但是在Java编程实践中,空指针异常(NPE)是开发过程中常见的障碍,它不仅阻碍了代码的正常运行,还常常成为系统不稳定性的根源。...先来说说NPE 空指针异常...NPE可以说,在日常开发中或多或少的都会遇到NPE的场景,即便你在开发过程中很谨慎,但是导致NPE的场景并不完全是由代码决定的,也可能是数据导致的。...通常情况下触发NPE的场景比如你没有初始化对象,但是直接调用该对象取参数就会报NPE,比如或者是你调用的方法在未查询到数据时直接返回null,但是在后续的逻辑处理中并没有对对象判空导致再取属性值时报NPE...或者是你的代码中需要获取外部资源,包括但不限于下载图片读取图片内容等操作,那么由于网络导致获取图片内容失败时,此时再处理图片内容就会报NPE。...你也可以在开发过程中通过增加非空判断来提升代码质量,任何口头的说数据库中某条数据一定存在,或者某个字段一定存在都不可信,在你的功能逻辑中如果遇到取值的情况,先判空再取值,没毛病。
其中以下的情况会产生NullPointerException 调用空对象的方法, 访问或者修改对象的字段值时 获取一个空对象(数组)的长度时, 修改或者回去null数组的一个元素或者值时 抛出异常时,抛出...以上是针对各种具体发生异常的情况,而对与日常使用过程中,可能抛出空指针异常的情景非常多,我们常用的手册中提到了以下几种NPE产生的实际使用场景。...远程调用返回对象时,一律要求进行空指针判断,防止NPE。 对于Session中获取的数据,建议进行NPE检查,避免空指针。...级联调用obj.getA().getB().getC();一连串调用,易产生NPE。 自动拆箱的NPE 如下代码中,代码逻辑出现问题的话,返回就是null。...return integer; } 同理如下代码也是同样的问题,均属于自动拆装箱时的NPE问题。
声明在实体属性上,前端发送的 字符串类型日期格式, 可以直接和对象进行绑定匹配!...而且可以同时对应 新增和修改; 新增在去新增的控制器model 这存储一个空的对象即可, 提交时候会把表单的数据存在这个属性中: 发送至控制器; 也就是说, 需要由控制器Modle给...modelAttribute 提供一个属性, modelAttribute 提交时也把表单的数据 返回值控制器;... --> 中不存在 modelAttribute="属性名" 自动以属性名为名,提交时候把表单的值都放进入,发送至控制器; --> modelAttribute="userForm" 所以存一个空的给它咯~ return "add"; } //新增 @RequestMapping("/add") public String
需求很简单,把从第三方拉取的数据匹配到自身公司后台设置的渠道后,聚合到一个列表中,批量入库。...然而就在匹配的逻辑中,上线后报了个NPE,这是作为一名中级开发不应犯的简单错误,新人被我狠狠的训了,记生产事故一次。...NPE是较常见的异常,希望大家不要纠结为什么测试没测出来,关键还是通过这样一个案例了解NPE的原因和解决方案。...channelNo, o.getChannelNo()) 看源码一目了然,该方法对左边的对象做了非空判断 image.png 3、用其他开源的工具类库或者自己实现 如: org.apache.commons.lang3...另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取! 推荐阅读 大数据扫黄,是怎样发现你的? Spring Security 学习笔记,看了必懂!
说明: 本手册明确防止 NPE 是调用者的责任。即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败、 序列化失败、 运行时异常等场景返回 null 的情况。...【推荐】 防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 1)返回类型为基本数据类型, return 包装数据类型的对象时,自动拆箱有可能产生 NPE。...3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。 4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...5) 对于 Session 中获取的数据,建议 NPE 检查,避免空指针。 6) 级联调用 obj.getA().getB().getC(); 一连串调用,易产生 NPE。...一个方法用 throws 标识了可能抛出的异常列表,调用该方法的方法中必须包含可处理异常的代码,否则也要在方法签名中用 throws 关键字声明相应的异常。
踩坑姿势:其实就是尽管你在之前做了对象不为空的判断,但你并不能保证对象中的值不为空,而且这时候去级联调用就会抛 NPE 。 手册中关于 NPE 的描述: 防止 NPE 是调用者的责任。...踩坑姿势: 可能我们知道 ConcurrentHashMap 的 K/V 都不能为空,但我们有时候并不知道传进来的值是否为空。 解决方案: 设置时做下检验,对它的特性正确理解及使用。...7. toArray() 集合转换数组 当我们需要把一个集合转换为数组时,往往会调用 toArray() 方法,如果你用的是无参的这个可以吗? ? 当然不可以啦!...这次我们从输出来看上面的所有关于 subList 的代码。 18行: 当你原始集合大小没有那么大时,毫无疑问抛异常。 20-21行:得到一个新的集合,我们往新集合中增加一条数据。...在 subList 场景中,高度注意对原集合元素个数的修改,会导致子列表的遍历、增加、删除均产生异常。
2:怎么产生的? 《阿里巴巴开发手册》中提到, 1)返回类型为基本数据类型,return 包装数据类型的对象时,自动拆箱有可能产生 NPE。...3) 集合里的元素即使 isNotEmpty,取出的数据元素也可能为 null。 4) 远程调用返回对象时,一律要求进行空指针判断,防止 NPE。...5) 对于 Session 中获取的数据,建议 NPE 检查,避免空指针。 6) 级联调用 obj.getA().getB().getC();一连串调用,易产生 NPE。...正例:使用 JDK8 的 Optional 类来防止 NPE 问题。 3:如何防止 ①对象防止,直接!=null ②集合类判空:一般采用!...类 JDK8中的Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。
领取专属 10元无门槛券
手把手带您无忧上云