【问题标题】:Dozer initialize property with empty string推土机用空字符串初始化属性
【发布时间】:2012-11-13 10:37:51
【问题描述】:

我需要用 Dozer 用空字符串初始化目标对象上的 String 属性。

想象一下这些物体:

SRC
public class Container {
            private String animalName;  
....
DEST
public class Animal {
    private String name;
    private String type;

我需要从 Container 初始化为 Animal 并将 type 属性设置为 "" 而不是 null:

我发现的唯一方法是编写一个自定义转换器,如下所示:

public class InitializeStringConverter extends DozerConverter<Container, String>{

    public InitializeStringConverter() {
        super(Container.class, String.class);
    }

    @Override
    public Container convertFrom(String arg0, Container arg1) {
        return null;
    }

    @Override
    public String convertTo(Container arg0, String arg1) {
        return "";
    }
}

并且有这个映射:

<mapping>
        <class-a>it.alten.sample.mapping.Container</class-a>
        <class-b>it.alten.sample.mapping.Animal</class-b>
        <field custom-converter="it.alten.sample.mapping.converter.InitializeStringConverter">
            <a>this</a>
            <b>type</b>
        </field>
        <!-- 
        <field>
            <a>animalName</a>
            <b>name</b>
        </field>
         -->
        <field>
            <a>animalType</a>
            <b>type</b>
        </field>
    </mapping>

有没有更简洁的方法来完成这个任务?

亲切的问候 马西莫

【问题讨论】:

    标签: mapping dozer


    【解决方案1】:

    Dozer 复制和转换值,它不应该像我想的那样以自定义方式初始化字段。

    我的解决方案:

    1. 为类或字段启用空映射 - docs
    2. 创建setter,初始化字段为空值而不是null,如:

      void setType(String type) {this.type = (type != null ? type : "");}

    我认为,它更清楚地解决了您的问题,因为 null 控件是 setter 的功能,它是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多