如何将 mapStruct 用于 PatchMapping?

How can I use mapStruct for a PatchMapping?

我想知道我能否忽略空字段并仅转换我在请求中输入的属性

我的实体:

public class Entity {
    private Long id;
    private String name;
    private String description;
}

我的 DTO:

public class EntityDTO {
    private String name;
    private String description;
}

我的映射器:

@Mapper(componentModel = "spring")
public interface EntityMapper {

    @BeanMapping(nullValueCheckStrategy = NullValueCheckStrategy.ON_IMPLICIT_CONVERSION)
    Entity toEntity(EntityDTO entityDTO);
}

我生成的代码:

@Component
public class EntityMapperImpl implements EntityMapper {

    @Override
    public Entity toEntity(EntityDTO entityDTO) {
        if (entityDTO == null) {
            return null;
        }

        EntityBuilder entity = Entity.builder();

        entity.name(tipoOperacaoParcialUpdate.getName());
        entity.description(tipoOperacaoParcialUpdate.getDescription());
        
        return entity.build();
    }
}

我想要这样的生成代码:

@Component
public class EntityMapperImpl implements EntityMapper {

    @Override
    public Entity toEntity(EntityDTO entityDTO) {
        if ( entityDTO.getName() != null ) {
            entityDTO.setName(entityDTO.getName());
        }
        if ( entityDTO.getDescription() != null ) {
            entityDTO.setDescription(entityDTO.getDescription());
        }

        EntityBuilder entity = Entity.builder();

        entity.name( entityDTO.getName());
        entity.description( entityDTO.getDescription());
        return entity.build();
    }
}

我想要这样的东西,我如何使用 mapStruct 做到这一点?

谢谢!

我想你要找的是Updating existing bean instances

e.q.

@Mapper(componentModel = "spring")
public interface EntityMapper {

    Entity updateEntity(@MappingTarget Entity entity, EntityDTO dto);
}

这将生成如下内容:

@Component
public class EntityMapperImpl implements EntityMapper {

    @Override
    public Entity updateEntity(Entity entity, EntityDTO dto) {
        if ( dto == null ) {
            return null;
        }

        if ( dto.getName() != null ) {
            entity.setName(dto.getName());
        } else {
            entity.setName( null );
        }

        if ( dto.getDescription() != null ) {
            entity.setDescription(dto.getDescription());
        } else {
            entity.setDescription( null );
        }

        return entity;
    }
}

如果您想避免设置为 null,您可以使用 NullValuePropertyMappingStrategy#IGNORE