7

有人知道如何使用推土机将常量值放入属性中吗?我在推土机的文档中没有看到任何相关内容

4

6 回答 6

3

不完全确定您的意思 - 如果您希望 Dozer 在从 BeanA 映射到 BeanB 时始终使用常量填充 BeanB.someField?

您可能希望为此映射注册一个自定义转换器。

于 2009-05-13T16:24:07.870 回答
2

如何利用事件机制?

所以你可以注册一个监听器来设置mappingFinished()你的监听器的值。有关详细信息,请咨询有关事件的推土机文档。当然,您必须在某种if ... instanceof条件下保护设置代码。

于 2009-06-17T21:40:20.790 回答
1

最新版本的推土机使这更容易。您可以指定两个自定义转换器也可以为给定字段映射指定该转换器的参数。创建一个单一的“ConstantConverter”应该是微不足道的,它将接受一个输入参数并将其 100% 的时间放在输出字段中。

于 2010-02-04T00:51:09.787 回答
1

一种可能的实现是:

public class ConstantsCustomConvertor implements ConfigurableCustomConverter{

    private String pararamter;
    @Override
    public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {     
        return pararamter;
    }

    @Override
    public void setParameter(String parameter) {
        this.pararamter = parameter;

    }
}

例子:

<field custom-converter-param="CONTANT_VALUE" custom-converter="org.yourcompany.ConstantsCustomConvertor">
    <a>a-class-dummyfieldname</a>
    <b>b-class-fieldname</b>
</field>    

此自定义转换器假定 b-class-fieldname 是 String 类型。

于 2014-10-15T22:33:37.367 回答
0

这对于ModelMapper来说非常简单:

ModelMapper modelMapper = new ModelMapper();

modelMapper.addMappings(new PropertyMap<SourceClass, DestClass>() {
  protected void configure() {
    map().setSomeProperty(someConstant);
  }
});

此示例映射someConstantDestClass.someProperty.

您可以在以下位置查看更多示例和文档: http: //modelmapper.org

于 2011-06-29T21:54:18.123 回答
0

假设您只想在单向映射中执行此操作,则以下内容适用于 String 常量:

/**
 * Custom one-way Dozer converter mapping to constant string value specified by a parameter.
 */
public class OneWayStringConstantConverter extends DozerConverter<Class, String> {

    public OneWayBooleanConstantConverter() {
        super(Class.class, String.class);
    }

    @Override
    public String convertTo(Class aClass, String aString) {
        // Return constant value specified by the parameter (source is ignored)
        return getParameter();
    }

    @Override
    public Class convertFrom(String aString, Class aClass) {
        throw new UnsupportedOperationException(
                "OneWayStringConstantConverter should only be used in one-way mappings");
    }
}

...调用者:

  <field custom-converter="full.path.to.OneWayStringConstantConverter"
         custom-converter-param="My constant string value">
     <a>class</a> <!-- Source not used: Converter only sets target of a one-way mapping -->
     <b>targetField</b>
  </field>

建议使用该class值作为虚拟“源字段”,因为它尚未使用,但getClass()方法保证存在于任何对象上。

我需要为布尔值做这件事,所以使用了这个:

/**
 * Custom one-way Dozer converter which maps to the constant boolean value (true or false)
 * specified by a parameter.
 */
public class OneWayBooleanConstantConverter extends DozerConverter<Class, Boolean> {

    public OneWayBooleanConstantConverter() {
        super(Class.class, Boolean.class);
    }

    @Override
    public Boolean convertTo(Class aClass, Boolean aBoolean) {
        // Return constant boolean value specified by the parameter (source is ignored)
        return Boolean.parseBoolean(getParameter());
    }

    @Override
    public Class convertFrom(Boolean aBoolean, Class aClass) {
        throw new UnsupportedOperationException(
                "OneWayBooleanConstantConverter should only be used in one-way mappings");
    }
}
于 2019-09-05T10:44:45.107 回答