избегайте ежедневной проверки ненулевых и непустых переменных в dto весной - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующий метод, который обновляет данные пользователя, если данные не пустые или ненулевые

public Users updateUser(Users requestBody) throws AppServiceException {

        Users user = new Users();
        try {

            user = userDAO.getUserByUserId(requestBody.getUserId());

        if (requestBody.getRole() != null && !requestBody.getRole().isEmpty()) {
            user.setRole(requestBody.getRole());
        }

        if (requestBody.getUserName() != null && !requestBody.getUserName().isEmpty()) {
            user.setUserName(requestBody.getUserName());
        }

        if (requestBody.getChannelType() != null && !requestBody.getChannelType().isEmpty()) {
            user.setChannelType(requestBody.getChannelType());
        }

        if (requestBody.getStatus() != null && !requestBody.getStatus().isEmpty()) {
            user.setStatus(requestBody.getStatus());
        }
        if (requestBody.getDevice() != null) {
            user.setDevice(requestBody.getDevice());
        }

        user.setUpdatedDate(new Date());

        user = userDAO.updateUser(user);


        } catch (Exception e) {

            e.printStackTrace();
            throw new AppServiceException(AppServiceException._FAIL_TO_UPDATE);
        }
        return user;
    }

Я проверял значения для ненулевых и isEmpty каждый раз.

Как этого избежать?

Ответы [ 4 ]

0 голосов
/ 14 ноября 2018

Если это просто копирование между двумя bean-компонентами с одинаковыми именами переменных, тогда вы можете использовать BeanUtils.copyProperties для этого.Здесь мы можем сказать BeanUtil для копирования ненулевых значений.Таким образом, код будет сокращен до 1 строки.

BeanUtils.copyProperties(source, destination, (.. optional parameter to copy non null value)
0 голосов
/ 14 ноября 2018

Предположим, у нас есть два класса:

@Data
class X {
    private String field1;
}

@Data
class Y {
    private String field2;
}

определить статический метод

static <F, T>void copy(F f, T t, Function<F, String> get, BiConsumer<T, String> set){
    String value = get.apply(f);
    if(value != null && value.isEmpty()){
        set.accept(t, value);
    }

}

и используйте его в своем коде:

    X x = new X();
    Y y = new Y();

    copy(x, y, X::getField1, Y::setField2);
0 голосов
/ 14 ноября 2018

Вы можете реализовать эту логику проверки в методах получения, т.е.

public Optional<String> getChannelType() {

    if (channelType.isEmpty() || channelType == null)
        return Optional.empty();
    else
        return Optional.of(channelType);

}
0 голосов
/ 14 ноября 2018

Вы можете использовать Apache Commons Lang's StringUtils.isEmpty (java.lang.String)

Проверяет, является ли строка пустой ("") или нулевой.

Если ваш код:

if (StringUtils.isEmpty(requestBody.getStatus())) {
...