我使用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以获得正确的对象映射?