[英]Dozer Mapper is not mapping composed nested fields
Tools/Frameworks in use:使用的工具/框架:
JDK 1.7
Spring 3.2.5.RELEASE
Dozer 5.5.1
Class: BaseModel.java类:BaseModel.java
package com.demo.model;
public class BaseModel {
protected Long createdBy;
protected Timestamp createdTimestamp;
protected Long updatedBy;
protected Timestamp updatedTimestamp;
protected Long revision;
// ... Getters/Setters
}
Class: Author.java类:Author.java
public class Author {
private BaseModel baseModel;
private Long id;
private String firstName;
private String lastName;
// Getter of baseModel
public BaseModel getBaseModel() {
return baseModel == null ? new BaseModel() : baseModel;
}
// ... Other Getters/Setters
}
Class: BasePojo.java类:BasePojo.java
package com.demo.web.pojo;
public class BasePojo {
protected Long createdBy;
protected Timestamp createdTimestamp;
protected Long updatedBy;
protected Timestamp updatedTimestamp;
protected Long revision;
// ... Getters/Setters
}
Class: AuthorPojo.java类:AuthorPojo.java
package com.demo.web.pojo;
public class AuthorPojo extends BasePojo {
private Long id;
private String firstName;
private String lastName;
// Getters/Setters
}
Class: SpringConfig.java类:SpringConfig.java
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan("com.demo")
public class SpringConfig {
}
Class: DemoDozerMapper.java类:DemoDozerMapper.java
@Component("demoDozerMapper")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class DemoDozerMapper extends DozerBeanMapper {
@PostConstruct
public void init() {
logger.info("PostConstruct called....");
this.initMappings();
}
private void initMappings() {
final BeanMappingBuilder authorMappingBuilder = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(Author.class, com.demo.web.pojo.Author.class,
TypeMappingOptions.mapId("authorMap"),
TypeMappingOptions.mapNull(true), TypeMappingOptions.oneWay())
.fields("baseModel.createdBy", "createdBy")
.fields("baseModel.createdTimestamp", "createdTimestamp")
.fields("baseModel.updatedBy", "updatedBy")
.fields("baseModel.updatedTimestamp", "updatedTimestamp");
}
};
addMapping(authorMappingBuilder);
}
}
Class: Demo.java类:Demo.java
public class Demo {
public static void main(String[] args) {
final ApplicationContext springAppContext = new AnnotationConfigApplicationContext(SpringConfig.class);
final Mapper dozerMapper = springAppContext.getBean("demoDozerMapper", DemoDozerMapper.class);
final Author authorModel = new Author();
authorModel.getBaseModel().setCreatedBy(Long.valueOf(1L));
authorModel.getBaseModel().setCreatedTimestamp(new Timestamp(System.currentTimeMillis()));
authorModel.setFirstName("First");
authorModel.setLastName("Last");
authorModel.setId(Long.valueOf(21101L));
final com.demo.web.pojo.Author author = new com.demo.web.pojo.Author();
dozerMapper.map(authorModel, author);
System.out.println("Author Pojo: " + author);
}
}
Output输出
Author Pojo: AuthorPojo {id=21101, firstName=First, lastName=Last, createdBy=null, createdTimestamp=null, updatedBy=null, updatedTimestamp=null, revision=null}
The fields createdTimestamp
and createdBy
are not mapped from model to pojo.字段
createdTimestamp
和createdBy
没有从模型映射到 pojo。 Am I doing anything wrong?我做错了什么吗? Could someone help?
有人可以帮忙吗?
I had another look after my comment above.我在上面的评论后又看了一遍。 As well as changing the way the
baseModel
is set on authorModel
, you also need to ensure you're calling the mapper passing the in the id corresponding to the mapping you defined in DemoDozerMapper.java (ie authorMap
) - see here for details on context based mapping in Dozer.以及改变的方式
baseModel
上设置authorModel
,你还需要确保你调用映射器传递对应于您在DemoDozerMapper.java(即定义的映射ID authorMap
) -看到 这里的上下文信息Dozer 中的基于映射。
The revised Demo.java should look like this:修改后的 Demo.java 应如下所示:
Class: Demo.java类:Demo.java
public class Demo {
public static void main(String[] args) {
final ApplicationContext springAppContext = new AnnotationConfigApplicationContext(SpringConfig.class);
final Mapper dozerMapper = springAppContext.getBean("demoDozerMapper", DemoDozerMapper.class);
final Author authorModel = new Author();
// Ensure base model is set
BaseModel baseModel = new BaseModel();
baseModel.setCreatedBy(Long.valueOf(1L));
baseModel.setCreatedTimestamp(new Timestamp(System.currentTimeMillis()));
authorModel.setBaseModel(baseModel);
authorModel.setFirstName("First");
authorModel.setLastName("Last");
authorModel.setId(Long.valueOf(21101L));
final AuthorPojo author = new AuthorPojo();
// Select the appropriate case to use
dozerMapper.map(authorModel, author, "authorMap");
System.out.println("Author Pojo: " + author);
}
}
Revised Output修订后的产出
Author Pojo: AuthorPojo [id=21101, firstName=First, lastName=Last, createdBy=1, createdTimestamp=2015-11-26 10:07:31.501, updatedBy=null, updatedTimestamp=null, revision=null]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.