我的实体返回字段为null示例:EntityTest{id=null,name=null}
但我需要,如果所有字段都为null,则返回EntityTest=null
测试实体
@Entity
@Table(name="TestEntity")
public class TestEntity {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name="test_name")
private String testName;
}
TestEntityDto
public class TestEntityDto {
private long id;
private String test_name;
}
TestEntityMapper
@Mapper
public interface TestEntityMapper {
TestEntity TestEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
实施
testEntityDTO.setId(null);
testEntityDTO.setNameTest(null);
TestEntity testEntity = TestEntityMapper.TestEntityDTOToTestEntity(testEntityDTO);
实际结果:
EntityTest{id=null, name=null}
预期结果:
EntityTest = null
在即将发布的1.5版本中,MapStruct添加了对条件映射的支持。在当前发布的Beta2 1.5中,不支持条件支持参数。但是,有一个开放的增强请求,要求将其添加到源参数中。
这意味着你可以做一些类似的事情:
public class MappingUtils {
@Condition
public static boolean isPresent(TestEntityDTO dto) {
if (dto == null) {
return false;
}
return dto.getId() != null || dto.getName() != null;
}
}
这意味着你可以有一个像这样的映射器
@Mapper(uses = MappingUtils.class)
public interface TestEntityMapper {
TestEntity testEntityDTOToTestEntity(TestEntityDTO testEntityDTO);
}
实现方式将看起来像:
public class TestEntityMapperImpl implements {
@Override
public TestEntity testEntityDTOToTestEntity(TestEntityDTO dto) {
if (!MappingUtils.isPresent(dto)) {
return null
}
// the rest of the mapping
}
}
注意:这在发布版本中还不可能,但这就是它的工作方式。除了这个未来的解决方案,MapStruct没有其他现成的解决方案。
我建议实现toString只是为了检查所有null的情况:
toString(){"id:"+id+",name:"+name;}
因此,如果这返回";id:null,name:null"然后你可以确定它是空的,并在检查等于后返回空