【问题标题】:Use spring-data-jpa and dozer in spring-mvc在 spring-mvc 中使用 spring-data-jpa 和 dozer
【发布时间】:2015-10-23 09:25:09
【问题描述】:
在spring-data-jpa中,repository返回Page<T>,实现类为PageImpl<T>,那我就不能用dozer来转换了,因为pageImpl有两个方法:hasContent()和getContent(),推土机不能分析类型。
PageRequest 缺少参数构造函数,推土机也无法转换。我的解决方法是重写它们,你有更好的方法吗?
【问题讨论】:
标签:
spring-mvc
spring-data-jpa
dozer
【解决方案1】:
您需要创建一个额外的类并将您的页面映射到它,这里是一个示例:
Dozer 的 Spring 配置:(例如:xml 文件位于 src/main/resources/META-INF/dozer 下)
XML 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
<mapping wildcard="true" type="one-way">
<class-a>com.comp.proj.domain.SrcClass
</class-a>
<class-b>com.comp.proj.model.DesClass
</class-b>
</mapping>
<mapping wildcard="false" type="one-way">
<class-a>org.springframework.data.domain.Page</class-a>
<class-b>com.comp.proj.model.PageResponse
</class-b>
<field>
<a>totalElements</a>
<b>totalElements</b>
</field>
<field>
<a>totalPages</a>
<b>totalPages</b>
</field>
<field>
<a>content</a>
<b>desClasses</b>
</field>
</mapping>
</mappings>
弹簧配置:
<bean class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles" value="classpath:META-INF/dozer/*.xml" />
</bean>
页面响应类:
public class PageResponse {
private List<DesClass> desClasses;
private Integer totalPages;
private Integer totalElements;
//sertters and getters
}
现在在你的控制器中注入:Mapper
@Resource
Mapper mapper;
并以这种方式将您的Page<SrcClass> page 转换为PageResponse:
mapper.map(page,PageResponse.class);