繁体   English   中英

Orika-如果对象的所有字段都为null,则将对象映射为null

[英]Orika - Map object to null if all fields of object are null

我有两个班级AB ,两个班级都有一个公司。 A公司比B CompanyCompanyidCNCompany没有)提供了更多信息。 我想使用orika映射所有字段。 如果对象的所有字段都为空,则我希望该对象为空!

我试图用单元测试来表达这一点。 要执行此操作必须做什么?

public class A {

    private Company company;

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

}

public class B {

    private CNCompany company;

    public CNCompany getCompany() {
        return company;
    }

    public void setCompany(CNCompany company) {
        this.company = company;
    }

}

public class Company {

    private Id id;
    private AccountId accountId;

    public Id getId() {
        return id;
    }

    public void setId(Id id) {
        this.id = id;
    }

    public AccountId getAccountId() {
        return accountId;
    }

    public void setAccountId(AccountId accountId) {
        this.accountId = accountId;
    }

}

public class CNCompany {

    private AccountId accountId

    public AccountId getAccountId() {
        return accountId;
    }

    public void setAccountId(AccountId accountId) {
        this.accountId = accountId;
    }

}

public class MyMapper extends ConfigurableMapper {
    @Override
    protected void configure(MapperFactory factory) {
        factory.classMap(A.class, B.class) //
                .mapNulls(false).mapNullsInReverse(false) //
                .byDefault() //
                .register();
    }
}

@Test
public void testMap() throws Exception {
    A a = new A();

    Company company = new Company();
    Id id = new Id();
    id.setValue("1");
    company.setId(id);
    a.setCompany(company);

    MyMapper myMapper = new MyMapper();
    B outcome = myMapper.map(a, B.class);

    assertThat(outcome.getCompany(), is(nullValue()));
}

如果我理解正确,那么如果Company对象仅包含null值,则希望getCompany返回null

在Orika中,您可以使用自定义转换器控制转换 对于您的示例,可能看起来像:

public class CompanyConverter extends CustomConverter<Company, CNCompany> {
    public CNCompany convert(Company source, Type<? extends CNCompany> destinationType) {
        if (isNothingButNulls(source)) {
            return null;
        }
        final CNCompany newCompany = new CNCompany();
        // do your thing
        return newCompany;
    }
}

我从未写过可以返回nullCustomConverter ,所以我不确定100%可以,但是应该可以。 请注意,转换器仍将需要注册。 我链接的文档显示了如何根据所需的转换器级别进行注册。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM