在写代码的过程中发现一个很容易出错的小bug,当使用toString方法把对象(Object)转成字符串时,很容易忘了考虑空指针异常:java.lang.NullPointerException。...使用示例: XXX.toString(); // XXX是Object类型 出现java.lang.NullPointerException异常的时候不太容易发现错误原因。...在写代码的时候,应该养成好习惯,使用下面的方式: String.valueOf(XXX); // XXX 是一个object类型的值 valueOf方法将Object转换为字符串,不管是否为null,...= null) { object.toString(); }
0x00 概述 在代码运行过程中,使用lombok的@Data处报错NullPointerException空指针异常。...0x01 问题表现 代码在IDEA中运行没问题,结果显示正常; 但是在打jar包后,运行就会空指针异常,报错如下: Exception in thread "main" java.lang.NullPointerException...根据报错日志,定位到具体类的@Data代码处,该类由于排名需要,重写了compareTo方法,进行了排序计算; 0x02 解决过程 经搜索后这是Lombok使用@Data的一个大坑,详细见Lombok...使用@Data的大坑,空指针错误; /** 原因是: @Data注解中有默认toString方法的重写,展示数据时,默认调用get方法的方式。...所以应该在传参或者类实例化时候进行过滤,对null值进行排除 */ 按照方法2解决后,发现jar包运行还是继续报NullPointerException空指针异常,错误日志没有变化; 检查代码后发现,代码逻辑中仍有部分代码未进行
本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决外键字段更新的方法,特别是使用 attrs 方式的实现。1. 简介Django 中的模型是应用程序中管理数据的核心部分。...设计模型我们将以一个简单的案例来说明如何更新模型字段。假设我们有两个模型:学生表(Student)和成绩表(Score)。成绩表中的 student 字段是一个外键,指向学生表中的相应记录。...常见的方式是使用模型实例的 save() 方法来保存修改。对于外键字段的更新,我们可以使用直接设置外键字段的方式,而不需要每次都查询外键表中的对象。...高级用法:使用 update() 方法批量更新字段除了直接设置外键字段外,还可以使用 Django 的 update() 方法来批量更新查询集中的对象。...总结与实践建议在本教程中,我们深入探讨了如何使用 Django 更新模型字段,特别是处理外键字段更新的方法。
任何类定义都可以使用@ToString注释,以使lombok生成toString()方法的实现。...默认情况下,将打印所有非静态字段。如果要跳过某些字段,可以使用@ ToString.Exclude注释这些字段。...或者,可以通过使用@ToString(onlyExplicitlyIncluded = true),然后使用@ToString.Include标记要包含的每个字段,来确切指定希望使用的字段。...标有@NonNull的字段将对这些参数进行空检查。...,项目中使用slf4j、log4j日志框架 十、@NonNull 该注解快速判断是否为空,为空抛出java.lang.NullPointerException。
将完全跳过所有静态字段(不考虑任何生成的方法,并且不会为它们创建setter / getter)。...null - check 如果lombok为您生成整个方法或构造函数(例如@Data),Lombok总是将字段上通常称为@NonNull的各种注释视为生成空值检查的信号。...)来指定哪些你希望使用的字段。...然后使用@ ToString.Include标记要包含的每个字段。 通过设置 callSuper 为 true ,可以将toString的超类实现的输出包含到输出中。...标有@NonNull 的字段会导致对这些参数进行空检查。
一个内部静态类,名为FooBuilder,其类型参数与静态方法相同(称为builder) 在构建器中:目标的每个参数有一个private非static 非 final 字段 在builder中:包私有的无参数空构造器...它返回与目标返回相同的类型 有意义的toString()实现 在包含target的类中:一个builder()方法,该方法创建builder的新实例 如果该元素已存在,则每个列出的生成元素都将被静默跳过...这包括构建器本身:如果该类已经存在,则lombok会简单地开始在此现有类中注入字段和方法,除非要注入的字段/方法当然已经存在。...子类如何使用 @Build 注解? 父类 ? 子类 ?...同时在子类和全参数的构造器使用 @Builder 注解,最终的 build() 函数只返回了空参的构造器创建的一个子类对象,因此属性“采用 builder 方式设置的 字段最终都丢失了。
如何使用Lombok? 1、安装插件和配置依赖 ? 如上图所示,Lombok支持所有主流的 IDE 开发工具及编译构建工具。...@Getter 和 @Setter 注解也可以单独使用在字段上面,同样也会生成对应的 get/ set 方法及一个默认的构造方法。...@ToString 使用在类上,默认生成所有非静态字段以下面的格式输出,如: public String toString(){ return "Person(userName=" + getUserName...@RequiredArgsConstructor 用在类上,使用类中所有带有 @NonNull 注解和 final 类型的字段生成对应的构造方法。...} @NonNull 用在属性上,用于字段的非空检查,如果传入到 set 方法中的值为空,则抛出空指针异常,该注解也会生成一个默认的构造方法。
过滤掉空数据方法 使用sql语句当中 is not null语句 例句: select * from table_name where 字段名 is not null; 同理如果需要查找字段名为空的数据的时候...,只需要通过is not null 即可实现该操作 select * from table_name where 字段名 is null; 另一种方法 当然也可以不在sql语句中进行过滤。...可以先将那个字段的数据全部提取出来,然后通过后端语言二次筛选,取出数据。 这样也是可以的。 本文共 114 个字数,平均阅读时长 ≈ 1分钟
注解在字段上,则在 setter, constructor 方法中加入判空,注意这里需要配合 @Setter、@RequiredArgsConstructor、@AllArgsConstructor 使用...注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法,同时可以指定生成的 setter 方法的访问级别 @Getter 使用方法同 @Setter,区别在于生成的是 getter...可以大大简化我们的代码 Lombok的优缺点 优点: 提高开发效率,自动生成getter/setter、toString、builder 等,尤其是类不断改变过程中,如果使用 IDEA 自动生成的代码...,我们则需要不停的删除、重新生成,使用 Lombok 则自动帮助我们完成 让代码变得简洁,不用过多的去关注相应的模板方法,其中 getter/setter、toString、builder 均为模板代码...自动生成的代码到底是如何产生的呢? 核心之处就是对于注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。
前言介绍 为了方便不同用户的定制化及业务需求,IMSDK 目前提供了五个维度的自定义字段 "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 均已键值对 Key-Value...形式存储并使用。...扩展相应的字段 Key,为相应的字段 Key 设置值 Value,这便是 IMSDK 字段的使用方式 "消息自定义字段" 有些不一样,请翻至对应的章节详阅 控制台添加自定义字段 1)进入控制台打开 "...应用配置" image.png 2)切换至 "功能配置" 页 image.png 3)将会看到 "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 4)点击...() 获取自定义字段的键值对; 适用场景 添加好友成功后,可以对好友进行备注,标记好友来源等字段可供使用,某些特殊场景下需要用到自定义字段,例如:星标好友,好友亲密度等一些场景 示例代码 写自定义字段
方法 @Getter:注解在属性上;为属性提供 getter 方法 @ToString:注解在类上;生成toString()方法,默认情况下,它会按顺序(以逗号分隔)打印你的类名称以及每个字段。...,它将使用所有非静态,非transient字段。...但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。...@NonNull: 注解在属性上;标识属性是不能为空,为空则抛出异常。 @Slf4j :注解在类上;根据用户实际使用的日志框架生成log日志对象。...要使用注解,必须引入lombok提供的库 maven引入依赖: org.projectlombok lombok
简介 在讲原理之前,我们先来复习一下 Lombok (老司机可以直接跳过本段看原理部分的内容)。 ...、toString、equals、hashCode 以及非空判断等,都可以使用 Lombok 有效的解决。 ...Lombok 所有注解如下: val:用在局部变量前面,相当于将变量声明为 final; @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,...也就是说,我们不应该无脑的使用 Lombok 对外暴露所有字段的 Getter/Setter 方法,因为有些字段在某些情况下是不允许直接修改的,比如购物车中的商品数量,它直接影响了购物详情和总价,因此在修改的时候应该提供统一的方法...但同时 Lombok 也存在这一些使用上的缺点,比如:降低了可调试性、可能会有兼容性等问题,因此我们在使用时要根据自己的业务场景和实际情况,来选择要不要使用 Lombok,以及应该如何使用 Lombok
1.Lombok是什么 Lombok是使用java编写的一款开源类库。其主作用是使用注解来代替一些具有格式固定,没有过多技术含量的编码工作。...3.lombok是如何实现以上功能的呢? 1.1 Lombok 是什么?...通过 IDE 找方法调用处也可以直接锁定到字段上,以前要点两下才能看到字段明细信息,使用 Lombok 点一下就能达到效果。...4.1 Lombok 使用注意 不建议直接使用 @Data 这种大而全的方式覆盖太多的简化场景。 toString 场景不建议使用 Lombok 的,建议使用系统自定义 ToString 里的方法。...:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。
,只需要集中注意力于字段field之中 Lombok简介 Lombok是一个非常实用的Java工具库,有效地简化Java代码的冗长。...它通过注解如@Data可以直接为Java bean在编译期动态地生成字段的getter/setter方法,使用注解@NoArgsConstructor 和@AllArgsConstructor 为Java...Lombok的构建支持maven和gradle,同时eclipse、myeclipse和idea等主流IDE也都和lombok兼容,所以可以放心大胆地使用Lombok,不用担心IDE的编译检查问题。...@Data注解 等同于@ToString, @EqualsAndHashcode, @Getter, @Setter和@RequiredArgsConstructor一起使用 @Value @Value...假如一个类有几十个字段,那么该如何设计这个类呢? 方法一:将几十个字段都添加在构造函数中。简单粗暴,而且在构造函数中为字段初始化也能够保证对象能够正确创建。
简介 在讲原理之前,我们先来复习一下 Lombok (老司机可以直接跳过本段看原理部分的内容)。...、toString、equals、hashCode 以及非空判断等,都可以使用 Lombok 有效的解决。...Lombok 所有注解如下: val:用在局部变量前面,相当于将变量声明为 final; @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出 NPE(NullPointerException...也就是说,我们不应该无脑的使用 Lombok 对外暴露所有字段的 Getter/Setter 方法,因为有些字段在某些情况下是不允许直接修改的,比如购物车中的商品数量,它直接影响了购物详情和总价,因此在修改的时候应该提供统一的方法...但同时 Lombok 也存在这一些使用上的缺点,比如:降低了可调试性、可能会有兼容性等问题,因此我们在使用时要根据自己的业务场景和实际情况,来选择要不要使用 Lombok,以及应该如何使用 Lombok
,程序员再也不需要去关注那些长长的方法,只需要集中注意力于字段field之中 Lombok简介 Lombok是一个非常实用的Java工具库,有效地简化Java代码的冗长。...它通过注解如@Data可以直接为Java bean在编译期动态地生成字段的getter/setter方法,使用注解@NoArgsConstructor 和@AllArgsConstructor 为Java...Lombok的构建支持maven和gradle,同时eclipse、myeclipse和idea等主流IDE也都和lombok兼容,所以可以放心大胆地使用Lombok,不用担心IDE的编译检查问题。...注解使用 Lombok的注解分为稳定版本和试验版本,这里主要介绍稳定版本,因为试验版本的支持目前和IDE不是很好 @Getter/@Setter注解 @Getter/@Setter注解的作用就是为字段添加...假如一个类有几十个字段,那么该如何设计这个类呢? 方法一:将几十个字段都添加在构造函数中。简单粗暴,而且在构造函数中为字段初始化也能够保证对象能够正确创建。
依赖才能使用 Lombok主要注解 @Getter and @Setter / 自动为属性提供 Set和Get 方法 @ToString / 该注解的作用是为类自动生成toString()方法 @EqualsAndHashCode...@ToString, @EqualsAndHashCode, @Getter,为非final字段添加@Setter,和@RequiredArgsConstructor,本质上相当于几个注解的综合效果 @...NonNull / 自动帮助我们避免空指针。...@Data注解使用 官网关于@Data注解的解释如下: All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on...不难理解,其可以看成是多个Lombok注解的集成,因此使用很方便!
常用注解 可以使用@Getter 或 @Setter标注任何字段,lombok 可以帮助你自动生成默认的get、set方法。...任何类的定义上都可以被@ToString标注,lombok可以生成一个toString()的实现方法。...可以在方法或构造器的参数上使用 @NonNull,lombok会为你生成一个空值检查的声明。...它将使用所有非静态,非瞬态字段,但是可以通过使用@ EqualsAndHashCode.Include或@EqualsAndHashCode标记类型成员来修改使用的字段。...@Accessors注释用于配置lombok如何生成和查找getter和setter。
前言:经常有客户要把ES数据导出csv来分析,但kibana内置导出功能有导出大小限制,推荐客户使用logstash导出csv文件。...问题背景:ES Serverless服务无法导出csv报错是无权限操作,ES Serverless服务这里目前还不支持用户导出查询,建议使用logstash导出。...} ] } }}' }}output { csv { fields => ["*"] path => "/mnt/path.csv" }}客户反馈导出文件为空确实很奇怪...,查询是有数据的为此自己搭建logstash测试了一下,测试结果如下csv打开之后只有行数没有数据问题原因:这个问题导出csv为空是因为数据有嵌套字段,导出csv会不可见解决方案:用output file
可以使用@Getter 或 @Setter标注任何字段,lombok 会帮助你自动生成默认的get、set方法。...任何类的定义上都可以被@ToString标注,lombok可以生成一个toString()的实现方法。...可以在方法或构造器的参数上使用 @NonNull,lombok会为你生成一个空值检查的声明。...它将使用所有非静态,但是可以通过使用@ EqualsAndHashCode.Include或@EqualsAndHashCode标记类型成员来修改使用的字段。...如何生成和查找getter和setter。
领取专属 10元无门槛券
手把手带您无忧上云