Dozer,如何从java.util.Map映射到复杂类型? [英] Dozer, how to map from java.util.Map to complex type?

查看:1173
本文介绍了Dozer,如何从java.util.Map映射到复杂类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从java.util.Map映射到一个复杂的类型,我们称之为Abc。

I'd like to map from a java.util.Map to a complex type, let's call it Abc.

<mapping>
  <class-a>java.util.Map</class-a>
  <class-b bean-factory="xyz.AbcBeanFactory" factory-bean-id="AbcBeanFactory">
    xyz.Abc
  </class-b>
  <field>
    <a>Name</a>
    <b>companyName</b>
  </field>
</mapping>

有了这个错误(这是可以理解的):
org。 dozer.MappingException:在类(接口java.util.Map)中找不到字段(名称)的读取或写入方法

With that I get this error (which is comprehensible): org.dozer.MappingException: No read or write method found for field (Name) in class (interface java.util.Map)

好的,我如何映射从java.util.Map,具有一个带有'Name'键的条目?我是否必须创建一个包含该java.util.Map的包装器对象,并为该映射中的每个条目提供getters / setter?

Ok, how do I map from a java.util.Map that has an entry with the key 'Name'? Do I have to create a wrapper object that holds that java.util.Map and provide getters/setters for each entry in that map that I want to map?

推荐答案

您可以在Dozer文档中找到映射的详细信息>。你需要提供一个不是一个普通字段的键。这是一个例子:

You can find details for mapping a Map in the Dozer documentation. You need to provide a key not a plain field. Here is an example:

类Abc:

package com.test;

public class Abc {
    private String companyName;
    private String companyAddress;

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getCompanyAddress() {
        return companyAddress;
    }

    public void setCompanyAddress(String companyAddress) {
        this.companyAddress = companyAddress;
    }
}

映射文件:

<mapping>
    <class-a>java.util.Map</class-a>
    <class-b>com.test.Abc</class-b>
    <field>
        <a key="name">this</a>
        <b>companyName</b>
    </field>
    <field>
        <a key="address">this</a>
        <b>companyAddress</b>
    </field>
</mapping>

测试代码:

Map<String, String> map = new HashMap<String, String>();
map.put("name", "Company Inc.");
map.put("address", "XYZ Commercial Street");

Abc destObject =  dozerMapper.map(map, Abc.class);

这篇关于Dozer,如何从java.util.Map映射到复杂类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆