添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在MapStruct库中使用自定义映射器。

MapStruct库用于在Java bean类型之间进行映射。 通过将自定义映射器与MapStruct一起使用,可以自定义默认的映射方法。

2.自定义映射

自定义映射器用于解决特定的转换要求。 为此,必须定义一种进行转换的方法。 然后,必须将该方法通知给MapStruct。 最后,MapStruct将调用该方法进行从源到目标的转换。

例如,假设有一个应用程序可以计算用户的体重指数(BMI)报告。 要计算BMI,必须收集用户的身体值。 要将英制单位转换为公制单位,可以使用自定义映射器方法。

通过MapStruct使用自定义映射器有两种方法。 可以通过在@Mapping注解的qualifiedByName属性中键入自定义方法来调用自定义方法,也可以为其创建注解。

定义一个DTO类来保存英制值:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserBodyImperialValuesDTO {
    private int inch;
    private int pound;

定义一个DTO类来保存指标值:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserBodyValues {
    private double kilogram;
    private double centimeter;

3.1定义带方法转化的映射器

@Mapper(componentModel = "spring")
public interface UserBodyValuesMapper {
    @Mapping(source = "inch", target = "centimeter", qualifiedByName = "inchToCentimeter")
    UserBodyValues userBodyValuesMapper(UserBodyImperialValuesDTO dto);
    @Named("inchToCentimeter")
    static double inchToCentimeter(int inch) {
        return inch * 2.54;

@Named注解与value参数一起使用,将自定义映射器方法告知MapStruct

   @Autowired
    private UserBodyValuesMapper userBodyValuesMapper;
    @Test
    public void test10() {
        UserBodyImperialValuesDTO dto = new UserBodyImperialValuesDTO();
        dto.setInch(10);
        UserBodyValues obj = userBodyValuesMapper.userBodyValuesMapper(dto);
        assertNotNull(obj);
        assertEquals(25.4, obj.getCentimeter(), 0);

3.2带注解的自定义映射器

要将自定义映射器与注释一起使用,必须定义一个注解,而不是@Named注解。 然后,必须通过指定@Mapping注解的qualifiedByName参数来通知MapStruct有关新创建的注解。

定义一个注解

@Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface PoundToKilogramMapper {

@PoundToKilogramMapper注解添加到poundToKilogram方法中:

@PoundToKilogramMapper
static double poundToKilogram(int pound) {
    return pound * 0.4535;

修改后的映射类

@Mapper(componentModel = "spring")
public interface UserBodyValuesMapper {
    @Mapping(source = "inch", target = "centimeter", qualifiedByName = "inchToCentimeter")
    @Mapping(source = "pound", target = "kilogram", qualifiedBy = PoundToKilogramMapper.class)
    UserBodyValues userBodyValuesMapper(UserBodyImperialValuesDTO dto);
    @Named("inchToCentimeter")
    static double inchToCentimeter(int inch) {
        return inch * 2.54;
    @PoundToKilogramMapper
    static double poundToKilogram(int pound) {
        return pound * 0.4535;
   @Test
    public void test11(){
        UserBodyImperialValuesDTO dto = new UserBodyImperialValuesDTO();
        dto.setPound(100);
        UserBodyValues obj = userBodyValuesMapper.userBodyValuesMapper(dto);
        assertNotNull(obj);
        assertEquals(45.35, obj.getKilogram(), 0);
                    1.概述如何在MapStruct库中使用自定义映射器。MapStruct库用于在Java bean类型之间进行映射。 通过将自定义映射器与MapStruct一起使用,可以自定义默认的映射方法。2.自定义映射自定义映射器用于解决特定的转换要求。 为此,必须定义一种进行转换的方法。 然后,必须将该方法通知给MapStruct。 最后,MapStruct将调用该方法进行从源到目标的转换。例如,假设有一个应用程序可以计算用户的体重指数(BMI)报告。 要计算BMI,必须收集用户的身体值。 要将英制单位转换
				
文章目录Mapstruct官方参考文档中的一些使用规则在mapstruct自定义转换方法引入依赖写转换接口测试官网将多个源对象的不同属性赋值给一个目标对象如果mapstruct放到了IOC容器里面,那么就不要实例化对象源对象中的对象属性怎么转化成目标对象中的对象属性? Mapstruct官方参考文档中的一些使用规则 在mapstruct自定义转换方法 <dependency> <groupId>org.mapstruct</groupId&
创建一个扩展了GenericMapper接口的Mapstruct映射器。 @Mapper ( componentModel = " spring " ) public interface FruitMapper extends GenericMapper< Fruit> { 将GenericMapperService注入您的服务并查找映射器。 @Autowired private GenericMapperService mapperService; GenericMapper< Fruit> mappe
用于协议缓冲区的Mapstruct SPI实现 这种命名策略有助于在您的域类和protobuf类之间生成有效的映射代码。 无论和类支载。 注意:取决于mapstruct 1.4.0.CR1 ProtobufAccessor命名策略 扩展DefaultProtobufAccessorNamingStrategy并提供必要的信息以自动映射除以下以外的所有字段 需要手动映射。 ProtobufEnumMapping策略 如果您遵循Google枚举的样式指南则实现EnumMappingStrategy并提供完整的枚举常量映射。 支持-映射功能: 常用原型类型和Java类型之间的标准映射函数: 时间戳<->即时 日期<-> LocalDate TimeOfDay <-> LocalTime 将以下部分添加到您的maven-compiler-plug
那些你不知道的MapStruct用法——Mapstruct自定义映射 mapStruct是一个很好用的字段映射工具,可以帮你自动生成代码完成字段映射。但有时需要在某些映射方法之前或之后应用自定义逻辑。 比如我们从数据库查出来的sex字段是一个数字 0,1,我们需要将其转换为男,女 放入Dto传给前端。我之前的做法是,mapstruct做完映射之后再进行字段转换。但这样会让service层增加很多set get 代码,如果是集合之间进行转换,我们还需遍历一次。 MapStruct 提供了两种方法:装饰器
使用表达式进行定义类型转换,expression="java(。。。)" 注意:使用表达式的时候,类必须是全路径的使用,或者@Mapper(imports={类名.class} 1、doTrim函数,toJsonString函数、自定义java函数(工具类见附录) import com.dm.bs.model.vo.BsFieldTransResult; import com.dm.bs.model.vo.BsFieldTransVO; import com.dm.bs.reposi
一、使用Spring提供的类型转换器 Spring定义了3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactroyBean中: 1、Converter<S,T>:将S类型对象转为T类型对象 2、ConverterFactory:将相同系列多个“同质”Converter封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number及Number子类(Integer、Long、Double等)对象
IntelliJ IDEA插件,可与MapStruct一起使用 什么是MapStructMapStruct是一个Java用于为Java Bean类生成类型安全和高性能的映射器。 要了解有关MapStruct的更多信息,请查看存储库或 完成@Mapping注释中的target和source属性(嵌套属性也可以使用) @ValueMapping批注中target和source属性的完成 @Mapper和@MapperConfig批注中的componentModel完成 为声明者和获取者的target和source属性转到声明 在target和source查找属性的用法,并在@Mapping注释中查找setter / getter的@Mapping 突出显示target和source属性 错误和快速修复: 缺少@Mapper或@MapperConfig批注
MapStruct-Java Bean映射,简单方法! 什么是MapStructMapStruct是一个Java用于为Java Bean类生成类型安全和高性能的映射器。 它使您不必手工编写映射代码,这是一个繁琐且容易出错的任务。 该生成器具有合理的默认值和许多内置的类型转换,但是在配置或实现特殊行为时,它会自动退出。 与在运行时工作的映射框架相比,MapStruct具有以下优点: 通过使用普通方法调用而不是反射来快速执行 编译时类型安全。 只能映射彼此映射的对象和属性,因此不会将订单实体意外映射到客户DTO等。 独立的代码-没有运行时依赖 如果发生以下情况,则在构建时清除错误报告:
场景再现: Bean 拷贝在我们的工作中非常的普遍,因为我们对实体进行了分层,常用的必入dto用来数据传输,vo是给前端在展示用的,所以我们经常会定义两层Object字段是保持一致的,便于我们 拷贝。编写这样的映射代码是一项乏味且容易出错的任务。 我们常用的是Spring的BeanUtils工具类,那么当有复杂的对象转换的时候呢比如map转bean等,List复杂对象需要深拷贝时候用Spring的BeanUtils还是要去自己封装写一些工具类,而这些工具类使用到了反射,而M...
Idea MapStruct是一种Java注解处理器,它可以自动化Java bean之间的映射。使用Idea MapStruct可以减少手动编写映射代码的繁琐过程,并提高代码质量和可维护性。Idea MapStruct使用简单,只需要定义两个bean,然后在它们之间使用@Mapper注解即可。Idea MapStruct支持映射不同类型之间的属性,同时还支持自定义映射器以处理特殊情况。使用Idea MapStruct还可以提高程序性能,因为它生成的映射器代码是类型安全的,避免了运行时类型转换的开销。此外,Idea MapStruct提供了许多高级特性,比如嵌套映射、格式化日期和时间、处理集合和地图等。总之,Idea MapStruct是一种非常实用的工具,可以极大地提高Java开发人员的效率和程序性能。