Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用DozerBean映射器转换URL字段?_Java_Dozer - Fatal编程技术网

Java 如何使用DozerBean映射器转换URL字段?

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

我有以下类,当我使用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 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的结果

在xml配置中添加以下语句:

<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>