最近从springside3项目里看到个值对象拷贝框架 dozer 学习了一下,发现还是满有用的,写点学习小结
适用情况:分层架构时对DTO,VO,Pojo之间值属性的拷贝,并且这种拷贝可以跨属性的,即两个对象可以完全不一样(字段名称,字段属性)
比如将基本类型转为包装类型,数组转字符串,各种Collection集合类型之间互相转化,举个例子页面有个产品form有个关键词属性 是个String数组,对应页面一排输入框,而在数据库里是用逗号(,)分隔的字符串,一般都是在程序里用
String.split(","),StringUtils.join(String[]s)这样的方法进行转化,现在将这两个互相转化的方法定义的pojo中
写道
public void setWords(String words) {
this.keyWords = words.split(",");
}
public String getWords(){
return StringUtils.join(keyWords);
}
在相应的dozer-bean-mapping.xml文件中定义get,set方法
写道
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mappings PUBLIC "-//DOZER//DTD MAPPINGS//EN"
"http://dozer.sourceforge.net/dtd/dozerbeanmapping.dtd">
<mappings>
<configuration>
<stop-on-errors>true</stop-on-errors>
<date-format>yyyy-MM-dd</date-format>
<wildcard>true</wildcard>
<trim-strings>true</trim-strings>
</configuration>
<mapping map-null="false">
<class-a>com.spring.bean.Students</class-a>
<class-b>com.spring.view.command.StudentCommand</class-b>
<field>
<a>word</a>
<b set-method="setWords(java.lang.String)" get-method="getWords">keyWords</b>
</field>
</mapping>
</mappings>
测试代码
写道
package com.spring.test;
import static java.lang.System.out;
import java.util.Date;
import net.sf.dozer.util.mapping.DozerBeanMapper;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.spring.bean.Students;
import com.spring.view.command.StudentCommand;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class BaseTest {
@Autowired
private DozerBeanMapper dozer;
@Test
public void fristDozerTetst() {
Students stu = new Students();
stu.setAge(" dff ");
stu.setId("dd");
stu.setDate(new Date());
stu.setWord("1,2,3,4,5,6");
StudentCommand studentCommand = (StudentCommand) dozer.map(stu,
StudentCommand.class);
out.println(ReflectionToStringBuilder.toString(studentCommand));
StudentCommand sc1 = new StudentCommand();
sc1.setAge("444");
sc1.setName("");
sc1.setValue(5555);
sc1.setDate("2008-08-08");
sc1.setKeyWords(new String[] { "a", "b", "c", "d", "e", "f" });
Students stu1 = (Students) dozer.map(sc1, Students.class);
out.println(ReflectionToStringBuilder.toString(stu1));
String s=stu1.getWord();
out.println(stu1.getWord());
}
控制台输出
写道
com.spring.view.command.StudentCommand@f9c40[id=dd,name=<null>,age=dff,value=0,date=2008-06-03,keyWords={1,2,3,4,5,6}]
com.spring.bean.Students@1bb5c09[id=<null>,name=,age=444,value=5555,order=<null>,date=Fri Aug 08 00:00:00 CST 2008,orderByType=<null>,word=abcdef]
abcdef
可见 dozer将原来的字符串"1,2,3,4,5,6"转化为字符数组={1,2,3,4,5,6}
而字符数组{ "a", "b", "c", "d", "e", "f" }则变为word=abcdef;
另外dozer也可格式化时间
<date-format>yyyy-MM-dd</date-format>
date=2008-06-03
sc1.setDate("2008-08-08");
date=Fri Aug 08 00:00:00 CST 2008
若两个需要互相拷贝的java对象有相同的字段名,则在配置文件中无需在指出就可以自带的copy,很方便
在程序里再也不用出现一堆的setXXX(XXX.getXXX)了
最后是spring的context文件
写道
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="net.sf.dozer.util.mapping.MapperIF"
class="net.sf.dozer.util.mapping.DozerBeanMapper" scope="singleton">
<property name="mappingFiles">
<list>
<value>dozer-bean-mapping.xml</value>
</list>
</property>
</bean>
</beans>
分享到:
相关推荐
这里提到的`java-property-utils-1.9.jar`并不是直接解决跨域问题的库,但它可能在配置或辅助处理跨域问题的过程中起到一定作用,因为它是一个Java属性处理工具包。 `java-property-utils`这个库主要用来处理Java的...
一. 在tomcat的lib目录下添加jar包cors-filter-1.5.0.1.jar,java-property-utils-1.9.jar 二. tomcat路径下conf/web.xml文件中添加以下内容,可以在原文件中找到标签酌情添加。不要加到开头或者结尾。 <filter> ...
`java-property-utils-1.9.jar` 可能用于读取自定义的配置文件,例如,你可能希望根据不同的环境设置不同的CORS策略,这时可以将策略写入一个属性文件,然后使用`java-property-utils`来读取并设置过滤器的参数。...
本篇将详细介绍如何利用java-property-utils-1.9.jar和cors-filter-1.7.jar这两个jar包解决Tomcat的跨域问题。 首先,让我们了解`java-property-utils-1.9.jar`。这个库是由Apache Commons项目提供的,主要用来处理...
在这个场景中,我们关注的两个jar包——"cors-filter-1.7.jar"和"java-property-utils-1.9.jar"与Geoserver的安装以及CORS配置紧密相关。 首先,让我们了解Geoserver。Geoserver是一款开源的地理信息系统服务器,...
标题中的"Cors-filter-1.7.jar"和"java-property-utils-1.9.jar"是两个Java库,分别用于处理跨域资源共享(CORS)和处理Java属性文件。这两个库在开发Web应用时非常常见,特别是在Java服务器端编程中。 首先,让...
总结来说,解决J2EE应用中的跨域问题,需要理解CORS的工作原理,以及如何利用如`cors-filter-1.7.jar`这样的库和`java-property-utils-1.9.jar`来配置和管理跨域策略。正确实施后,可以确保多个源的网页能够安全地与...
本文将详细介绍JSONP和CORS的概念、作用以及如何使用`cors-filter-1.7.jar`和`java-property-utils-1.9.jar`这两个jar包来帮助我们实现跨域。 **JSONP** JSONP是一种绕过同源策略的非官方跨域解决方案。它主要依赖...
标题中的“tomcat跨域cors相关jar包 cors-filter-1.7.jar和java-property-utils-1.9.jar”指的是在Apache Tomcat服务器上处理跨域请求时所用到的两个关键库。CORS(Cross-Origin Resource Sharing)是现代Web应用...
总结起来,`cors-filter-1.7.jar` 和 `java-property-utils-1.10.jar` 在Java Web环境中结合使用,可以帮助开发者轻松地实现跨域资源共享(CORS)配置,允许不同源的Web应用之间安全地交换数据。通过`CORSFilter`和...
对于 "orm" 模块,这通常指的是对象关系映射(Object-Relational Mapping),它是数据库编程中的一种技术,允许开发者使用面向对象的方式操作数据库,而无需关心底层的 SQL 语句。"commons.zip" 可能是项目中一个...
标题 "Indoor-Mapping-Using-the-VLC-Channel-State-Information-master源码" 提供的信息表明,这是一个关于室内定位技术的项目,它利用了Visible Light Communication (VLC)的信道状态信息。VLC是一种利用可见光...
hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示
hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-...
标题中的“简单的OR-Mapping工具---不差托作者”指的是一个关于对象关系映射(Object-Relational Mapping,简称ORM)的简易工具,由作者“不差托”开发。ORM是一种编程技术,它允许程序员使用面向对象的方式操作...
《MATLAB Mapping Toolbox详解——基于R2019b版本》 MATLAB Mapping Toolbox是MATLAB软件中的一个重要扩展工具箱,专为地球科学、航空航天、地理信息系统(GIS)以及地图制图领域的用户设计。该工具箱包含了丰富的...
首先,我们关注到三个关键的jar包:`java-property-utils-1.9.jar`、`cors-filter-1.7.jar` 和 `java-util-1.9.1.jar`。这些jar包在Tomcat跨域CORS配置中起到关键作用。 1. **java-property-utils-1.9.jar**: 这个...
Mapping co-authorships with BibExcel
`java-property-utils-1.9.jar` 是一个Java属性工具库,主要用于读取和处理Java配置文件中的属性。在Web应用中,我们经常需要从配置文件中读取参数,例如设置CORS策略时,可能需要从配置文件中读取允许的源、方法等...
这在SLAM(Simultaneous Localization and Mapping)或多传感器融合中尤为关键。 此外,点云的可视化是开发和调试过程中的重要环节。pointcloud_utils可能集成了与matplotlib或mayavi等可视化库的接口,允许用户在...