如何将mapStruct用于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做到这一点?

谢谢!

我认为您正在寻找的是更新现有的bean实例。

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

相关内容

  • 没有找到相关文章

最新更新