【问题标题】:Dozer Mapping from HashSet to Arraylist从 HashSet 到 Arraylist 的推土机映射
【发布时间】:2017-02-02 05:08:20
【问题描述】:

我正在尝试使用推土机映射将一个哈希集从 PO 对象映射到模型对象中的列表。

这是我的源类和目标类:-

 public class Source implements Serializable {
   Set<NoteVariableDefinitionPOImpl> noteVariableDefinitionPO = new HashSet<NoteVariableDefinitionPOImpl>();
 }

public class Destination implements Serializable {
 List<NoteVariableDefinition> noteVariableDefinition = new ArrayList<NoteVariableDefinition)();

NoteVariableDefinitionPOImpl 类:

 class NoteVariableDefinitionPOImpl {
  int x;  // setter + getter
 }

NoteVariableDefinition 类:

 class NoteVariableDefinition {
  int y ; 
  // setter + getter
 }

我的推土机映射配置是:

 <mapping wildcard="false" map-id="NC.Source.Destination" map-null="false">
    <class-a>test.Source</class-a>
    <class-b>test.Destination</class-b> 

    <field map-id="NC.NoteVariableDefinitionPOImpl.NoteVariableDefinition">
        <a>noteVariableDefinitionPO</a>
        <b>noteVariableDefinition</b>
        <a-hint>java.util.HashSet</a-hint>
        <b-hint>java.util.ArrayList</b-hint>
    </field>
</mapping>


<mapping wildcard="false"
    map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition" type="one-way" map-null="false">
    <class-a>com.test.po.impl.NoteVariableDefinitionPOImpl</class-a> 
    <class-b>com.test.model.NoteVariableDefinition</class-b>
    <field>
        <a>x</a>
        <b>y</b>
    </field>
</mapping>

每当我运行此映射时,我总是会收到以下错误:

  MapId: NC.NoteVariableDefinitionPO.NoteVariableDefinition
  Type: null
  Source parent class: test.Source
  Source field name: noteVariableDefinitionPO
  Source field type: class java.util.HashSet
  Source field value:   [com.test.po.impl.NoteVariableDefinitionPOImpl@e21649a8]
  Dest parent class: test.Destination
  Dest field name: noteVariableDefinition
  Dest field type: java.util.List
  org.dozer.MappingException: Class mapping not found by map-id: SRC-CLASS-    com.test.po.impl.NoteVariableDefinitionPOImpl DST-CLASS-java.util.ArrayList MAP-ID->NC.NoteVariableDefinitionPO.NoteVariableDefinition

在这种情况下,如何将 HashSet 映射到 ArrayList?

我是推土机映射的新手,因此也无法定义自定义转换器。

Dozer 文档说它可以将 Set 转换为 List

Dozer 自动在集合类型之间映射并自动执行任何类型转换。

Dozer 会自动处理以下集合映射:(这些都是 >>all 双向的):

设置为列表

【问题讨论】:

    标签: java dozer


    【解决方案1】:

    试试这个:-

    首先定义一个自定义转换器:

    package com.test.converter;
    
    public class Converter extends DozerConverter<Set, List> {
    
       @Autowired
       Mapper mapper;
    
       public Converter() {
        super(Set.class, List.class);
       }
    
        @Override
        public List convertTo(Set noteVariableDefinitionPO, List   noteVariableDefinition) {
            //iterate set
            NoteVariableDefinition mappedValue = mapper
                    .map(noteVarDefinitionPO,
                            NoteVariableDefinition.class,
                            mappingID);
             // add it to list and return
      }
    
      @Override
      public Set convertFrom(List arg0, Set arg1) {
        return null;
      }
    
    }
    

    然后定义如下全局配置:

      <mappings>
        <configuration>
           <custom-converters>
              <converter type= "com.test.converter.Converter"  (path to custom converter)>
                   <class-a>java.util.Set </class-a>
                   <class-b>java.util.List </class-b>
              </converter>
          </custom-converters>
       </configuration>
    </mappings>
    

    并将您的字段值更改为:

       <field map-id="NC.NoteVariableDefinitionPO.NoteVariableDefinition"
            custom-converter= "com.test.converter.Converter" (path to custom  converter)>
            <a>noteVariableDefinitionPO</a>
            <b>noteVariableDefinition</b>
            <a-hint>java.util.HashSet</a-hint>
            <b-hint>java.util.ArrayList</b-hint>
        </field>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多