📜  @Bean public ModelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setMatchingStrategy(MatchingStrategies.STRICT); } - Java (1)

📅  最后修改于: 2023-12-03 14:59:07.736000             🧑  作者: Mango

使用 ModelMapper 在 Java 中进行对象映射

简述

ModelMapper 是 Java 中一个方便的对象映射工具,可以简化对象之间的转换过程。本文将介绍如何在 Java 中使用 ModelMapper,以及配置 ModelMapper 中的 Matching Strategy。

安装

ModelMapper 可以通过 Maven 进行安装:

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.8</version>
</dependency>
使用
简单映射

假设有两个类,分别为 UserUserDto。它们的属性名称和类型都是相同的。

public class User {
    private Long id;
    private String firstName;
    private String lastName;
    // ...
}

public class UserDto {
    private Long id;
    private String firstName;
    private String lastName;
    // ...
}

使用 ModelMapper 进行对象映射非常简单:

ModelMapper modelMapper = new ModelMapper();
User user = new User(1L, "John", "Doe");
UserDto userDto = modelMapper.map(user, UserDto.class);
高级映射

当两个类的属性不完全相同时,可以使用 ModelMapper 的高级映射功能。这需要创建一个 Converter,并将其注册到 ModelMapper 中。

例如,假设 UserUserDto 中的一个属性名称不相同:

public class User {
    private Long id;
    private String firstName;
    private String lastName;
    private Date birthdate;
    // ...
}

public class UserDto {
    private Long id;
    private String firstName;
    private String lastName;
    private LocalDate birthdate;
    // ...
}

可以使用 ConverterDate 转换为 LocalDate

Converter<Date, LocalDate> dateToLocalDateConverter = new Converter<Date, LocalDate>() {
    @Override
    public LocalDate convert(MappingContext<Date, LocalDate> context) {
        return context.getSource() == null ? null : LocalDate.ofInstant(context.getSource().toInstant(), ZoneId.systemDefault());
    }
};
modelMapper.addConverter(dateToLocalDateConverter);

现在,可以使用 ModelMapper 进行对象映射:

User user = new User(1L, "John", "Doe", new Date());
UserDto userDto = modelMapper.map(user, UserDto.class);
Matching Strategy

ModelMapper 支持几种 Matching Strategy,用于解决属性名称不匹配的情况。其中,STRICT 策略是默认的。

可以使用 setMatchingStrategy() 方法来更改 Matching Strategy:

ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
结论

ModelMapper 是一个方便的 Java 对象映射工具,可以简化对象之间的转换过程。它还支持多种 Matching Strategy,可以解决属性名称不匹配的情况。