spring - @RequestBody 下的映射字段
问题描述
我想更新我的字段为“列表”类型的空值
正如我所理解的,下面是初始化对象的点,所以在这些点中,我们应该做一些事情来初始化空列表以防空列表。
- 控制器(当对象来自前端时)
- 初始化(new AnyObject() 或 AnyObject.toBuilder - lombok)
- FeginClient - API 之间的调用
是否有一些框架/注释在 null 的情况下会设置空列表?
以下是我目前所做的
public class TestMapin {
public static void main(String[] args) throws IllegalAccessException {
Test test = new Test();
notNull(test);
System.out.println(test);
}
public static void notNull(Object test) throws IllegalAccessException {
for (Field field : test.getClass().getDeclaredFields()) {
boolean access = field.canAccess(test);
field.setAccessible(true);
if (field.get(test) == null) {
if (field.getType().isAssignableFrom(List.class)) {
field.set(test, Collections.emptyList());
} else if (field.getType().isAssignableFrom(Map.class)) {
field.set(test, Collections.emptyMap());
}
} else if (field.getType().getPackageName().contains("org.owozniak.selfestem")) {
notNull(field);
}
field.setAccessible(access);
}
}
}
@Setter
@ToString
class Test {
private ArrayList<String> stringList;
private Box box = Box.builder().build();
private Magazine magazine;
}
所以,我需要使用 - 通过 toBuilder 初始化 - @Singular 注释 - 控制器/Feign 客户端 - 将此代码片段注入到弹簧过滤器 - 通过构造函数初始化 - 使用静态工厂方法,该方法将使用此代码片段并返回“增强”实例
还有更多的想法/框架吗?
解决方案
我建议将@Singular 注释与@Builder 一起使用。这将使用非空列表初始化集合。通过使用@Singular 注解注解其中一个参数(如果使用@Builder 对方法或构造函数进行注解)或字段(如果使用@Builder 对类进行注解),lombok 会将该构建器节点视为一个集合,并生成 2'adder ' 方法而不是 'setter' 方法。一种将单个元素添加到集合中,另一种将另一个集合的所有元素添加到集合中。不会生成仅设置集合(替换已添加的任何内容)的设置器。还会生成“清除”方法。您可以阅读我最近的文章https://technicalsand.com/using-lombok-advanced-features/的全部详细信息
import lombok.Builder;
import lombok.Singular;
import java.util.Set;
@Builder
public class BuilderExample {
@Builder.Default private long created = System.currentTimeMillis();
private String name;
private int age;
@Singular
private Set<String> occupations;
}
推荐阅读
- salt-stack - 无法在 Salt 上应用状态文件
- postgresql - 以秒为单位截断所有查询的日期时间,但将毫秒存储在 Postgres 中
- bisection - 在R中找到根的二分法
- javascript - 在动态生成的按钮上添加多个操作
- validation - 首字母的输入掩码(微软访问)
- debugging - 跟踪时 Prolog 中的重做是什么?
- mongodb - 如果端口明显被删除,我如何在 FreeDSB 上安装 MongoDB?
- javascript - 防止功能触发3次以上
- azure - Azure 在 Powershell 中使用资源管理器发布 Web 应用
- reactjs - 带有 onclick 事件处理程序的锚标记在 React 中不起作用