Java 如何使用DozerBean映射器转换URL字段?
我有以下类,当我使用Dozer Bean Mapper将Java 如何使用DozerBean映射器转换URL字段?,java,dozer,Java,Dozer,我有以下类,当我使用Dozer Bean Mapper将ProductEntity转换为Product时,反之亦然: public class ProductEntity(){ private String name; private String description; private URL site; } public class Product(){ private String name; private String descript
ProductEntity
转换为Product
时,反之亦然:
public class ProductEntity(){
private String name;
private String description;
private URL site;
}
public class Product(){
private String name;
private String description;
private URL site;
}
我得到以下错误:
内部错误[java.lang.NoSuchMethodException:java.net.URL.()
Dozer与这个URL类不兼容,还是我做错了什么?我已经有一段时间没有做Dozer了,但是你看到这一点的原因是Dozer映射对象的方式。它只是想通过调用无参数构造函数来创建一个新的对象,因为
URL
没有构造函数,这就是为什么你要这么做的原因g这一例外
解决方法是创建一个标识转换:将实体的一个实例映射到完全相同的实体类型
我们的做法分为两部分:
首先,在dozer.xml
文件中声明自定义配置
<configuration>
<custom-converters>
<converter type="com.stackoverflow.URLConverter">
<class-a>java.net.URL</class-a>
<class-b>java.net.URL</class-b>
</converter>
</custom-converters>
</configuration>
这里的过程相当机械:
- 尝试将URL转换为URI,然后将其转换回URL
- 如果URI或URL存在任何格式错误,请将其退回-无论如何,我们不应该在这种状态下处理格式错误的URL
- 否则,返回已转换URL的结果
<configuration>
<copy-by-references>
<copy-by-reference>
java.net.URI
</copy-by-reference>
</copy-by-references>
</configuration>
java.net.URI
我们假设您的每个属性都有public
accessor(getter/setter)方法,对吗?-另外,您可以共享映射.xml
文件(如果有)吗@ochi是的,我有所有的公共访问器……但我找不到映射。xml@MrPaulHenry-奇怪!你能分享一下你是如何进行映射的吗?@ochi我正在使用BeanMappingBuilder builder=new BeanMappingBuilder()取而代之的是xml@MrPaulHenry好的,但是你能分享一些你是如何做到这一点的示例代码吗?-可能是某个地方的输入错误?丢失的配置?或者。。。?
<configuration>
<copy-by-references>
<copy-by-reference>
java.net.URI
</copy-by-reference>
</copy-by-references>
</configuration>