我想知道我是否可以忽略空字段,只转换我在请求中放入的属性
我的实体:
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