使用Orika在映射异常的字段上设置空值

时间:2019-07-18 09:24:27

标签: java orika

我正在使用Orika从一个复杂的实体(超过300个字段)映射到另一个实体。只要源实体具有不期望的字段,整个目标实体就会设置为null。我想在字段级别上处理异常(或仅将错误字段设置为null),而不必为Entity创建自定义映射器,并自己进行字段转换(300多个字段)。

创建自定义映射器的工作原理是,我可以完全控制字段,并且可以控制异常。问题在于这种方式我没有利用Orika。

这是我的Mapper代码:

public class OrikaTransformServiceImpl implements TransformService {

    public OrikaTransformServiceImpl() {
        MapperFactory mapperFactory = new DefaultMapperFactory.Builder()
                //.compilerStrategy(new EclipseJdtCompilerStrategy())
                .propertyResolverStrategy(new MyCustomPropertyResolver())
                .build();

        ConverterFactory converterFactory = mapperFactory.getConverterFactory();

        mapperFactory.classMap(ExtractionListItem.class, CompanyData.class)
                .field("values['companyNm']", "nombre")
                .field("values['companyActvt']", "actividad")
                .field("values['contractTp']", "tipoContrato")
                .field("values['contractTpOtr']", "tipoContratoOtro")
                .field("values['position']", "cargo")
                .field("values['annualSalary']", "ingresosAnuales")
                .field("values['bonus']", "bonus")
                .field("values['startDate']","antiguedadEmpresa")
                .field("values['positionDate']","antiguedadCargo")
                // 300+ fields
                .customize(new CompanyDataCustomMapper(this))
                .byDefault()
                .mapNulls(true)
                .register();

    }

    public <F, T> T map(F mapFromObject, Class<T> mapToClass) {
        T result = null;
        try {
            result = mapper.map(mapFromObject, mapToClass);
        } catch (Exception e) {
            log.error("Error while mapping [{}] to [{}]", mapFromObject.getClass().getSimpleName(), mapToClass.getSimpleName());
            log.error("Error: [{}]", e.getMessage());
            e.printStackTrace();
        }
        return result;
    }

}

我的转换代码:

    CompanyData company = this.transformService.map(entityWithMap, CompanyData.class);

例如,如果日期不正确,则map方法将引发MappingException错误,然后整个公司实例为null。

我想单独对待字段映射异常,或者将失败的字段直接设置为null。

0 个答案:

没有答案