Отображение полей в @RequestBody - PullRequest
0 голосов
/ 21 февраля 2019

Я бы хотел, чтобы в новых полях были нулевые значения для моих полей, которые являются типом "списка"

Как я поняла ниже, это точки, в которых объект инициализируется, поэтому в них мы должны сделать что-то, чтобы инициализировать пустой список в случае, еслииз нуля.

  • Контроллер (когда объект приходит из внешнего интерфейса)
  • Инициализация (новый AnyObject () или AnyObject.toBuilder - lombok)
  • FeginClient - Вызовы междуApis

Есть ли какая-нибудь структура / аннотация, которая в случае нулевого значения установит пустой список?

Ниже приведено то, что я сейчас сделал

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 клиенты - внедрить этот фрагмент кода в пружинные фильтры - Инициализация через конструктор - Использовать статический метод фабрики, который будет использовать этот фрагмент кода и вернуть «расширенный» экземпляр

Есть еще идеи / рамки?

1 Ответ

0 голосов
/ 22 февраля 2019

Я предлагаю использовать аннотацию @Singular вместе с @Builder.Это инициализирует коллекцию с ненулевым списком.Аннотируя один из параметров (если аннотирует метод или конструктор с помощью @Builder) или поля (если аннотирует класс с помощью @Builder) с помощью аннотации @Singular, lombok будет обрабатывать этот узел компоновщика как коллекцию и генерирует 2 'сумматор«методы» вместо метода «сеттера».Один, который добавляет один элемент в коллекцию, и один, который добавляет все элементы другой коллекции в коллекцию.Никакой установщик, который просто установит коллекцию (заменяя все, что уже было добавлено), не будет создан.«Чистый» метод также генерируется.Вы можете прочитать полную информацию о моей недавней статье 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;
}
...