有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有两个班AB,这两个班都有一个公司。{}的公司比{}的公司获得了更多的信息({}有{}而{}没有)。我想用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()));
}

共 (1) 个答案

  1. # 1 楼答案

    如果我理解正确,如果Company对象只包含空值,您希望getCompany返回null

    在Orika中,您可以使用custom converter控制转换。对于您的示例,它可能看起来像:

    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;
        }
    }
    

    我从来没有写过一个CustomConverter可以返回null,所以我不是100%确定这会有效,但它应该有效。请注意,转换器仍需注册。我链接的文档显示了如何根据您希望转换器处于的级别进行注册