首页 > 解决方案 > @RequestBody 下的映射字段

问题描述

我想更新我的字段为“列表”类型的空值

正如我所理解的,下面是初始化对象的点,所以在这些点中,我们应该做一些事情来初始化空列表以防空列表。

是否有一些框架/注释在 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 客户端 - 将此代码片段注入到弹簧过滤器 - 通过构造函数初始化 - 使用静态工厂方法,该方法将使用此代码片段并返回“增强”实例

还有更多的想法/框架吗?

标签: springspring-bootspring-mvcspring-data-jpalombok

解决方案


我建议将@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;
}

推荐阅读