推土机映射Map <string,object =“”>

时间:2018-01-14 22:49:45

标签: java mongodb dozer

我使用Dozer Mapper在dao层(使用MongoDB)和业务逻辑层之间映射我的对象。实际上,对象结构是相同的。

文档类(在语义上更接近业务逻辑层)

public class Document {
    private String id;
    private String schema;
    private Map<String, Object> attributes = new HashMap<>();
}

DocumentEntity类(在语义上更接近dao图层)

public class DocumentEntity {
    @Id
    private String id;

    @Field("schema")
    private String schema;

    @Field("attributes")
    private Map<String, Object> attributes = new HashMap<>();
}

以下是dozer-bean-mappings.xml

的示例
<mapping>
    <class-a>DocumentEntity</class-a>
    <class-b>Document</class-b>
</mapping>

这是在将一个对象保存到MongoDB之前将其转换为另一个对象的方法

DocumentEntity toEntity(Document document) {
    DocumentEntity entity = new DocumentEntity();
    mapper.map(document, entity);
    return entity;
}

正如您所看到的,attributes字段为Map<String, Object>。在我尝试映射复杂类型“inside”Object之前,一切正常。我需要有两个字段的对象列表,每个字段都是这个Map的值。

在顶层有REST API,它为MongoDB提供了保存对象。但是由于Dozer的错误映射类型变得无效。

JSON输入

{
  "schema":"sch_1",
  "attributes": {
      "objUID": "obj_1",
      "nestedObjects": [
        {
          "objUID": "obj_1_1",
          "objSchema": "sch_1_1"
        },
        {
          "objUID": "obj_1_2",
          "objSchema": "sch_1_2"
        }
      ]
    }
}

这是在映射后保存的:

{
  "schema":"sch_1",
  "attributes": {
      "objUID": "obj_1",
      "nestedObjects": [
          "{objUID=obj_1_1, objSchema=sch_1_1}",
          "{objUID=obj_1_2, objSchema=sch_1_2}"
      ]
  }
}

所以,获取对象列表我只获得字符串列表。 我应该如何配置dozer以获得正确的对象映射?

0 个答案:

没有答案