Dozer封裝物件或List的轉換

lq6812574發表於2020-10-29

        <dependency>
            <groupId>com.github.dozermapper</groupId>
            <artifactId>dozer-spring-boot-starter</artifactId>
            <version>6.4.1</version>
        </dependency>

import com.github.dozermapper.core.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 *
 * dozer轉換類
 *
 *

 */
@Component
public class Dozer {

    /**
     * dozer轉換的核心mapper物件
     */
    private static Mapper dozerMapper;

    @Autowired
    private Mapper mapper;

    @PostConstruct
    private void construct() {
        Dozer.setDozerMapper(mapper);
    }

    private static void setDozerMapper(Mapper dozerMapper) {
        Dozer.dozerMapper = dozerMapper;
    }

    /**
     * 轉換實體為另一個指定的實體
     * 任意一個引數為NULL時 會丟擲NPE
     * {@link com.github.dozermapper.core.util.MappingValidator#validateMappingRequest}
     *
     * @param source 源實體 不能為NULL
     * @param clazz 目標實體 不能為NULL
     * @param <T> 泛型
     * @return 轉換後的結果
     */
    @NonNull
    public static <T> T convert(@NonNull Object source, @NonNull Class<T> clazz) {
        return  dozerMapper.map(source, clazz);
    }

    /**
     * 轉換List實體為另一個指定的實體
     * source如果為NULL 會使用空集合
     * 在目標實體為NULL時 會丟擲NPE
     * {@link com.github.dozermapper.core.util.MappingValidator#validateMappingRequest}
     *
     * @param source 源集合 可以為NULL
     * @param clazz 目標實體 不能為NULL
     * @param <T> 泛型
     * @return 轉換後的結果
     */
    @Nullable
    public static <T> List<T> convert(@Nullable List<?> source, @NonNull Class<T> clazz) {
        return Optional.ofNullable(source)
                .orElse(Collections.emptyList())
                .stream()
                .map(bean -> dozerMapper.map(bean, clazz))
                .collect(Collectors.toList());
    }
}

相關文章