我已经使用推土机现场级映射实现了带有静态自定义转换器参数的自定义转换器。但在我的情况下,自定义转换器参数将随时更改,我需要动态传递它们。
XML字段级推土机映射:
<field custom-converter-id="decoder" custom-converter-param='{"no":15,"name":"time","size":4,"covert":"test"}'>
<a>data.message</a>
<b>test[0].testField</b>
</field>
如果您使用依赖注入框架,您可以向某个bean添加参数,并通过从自定义转换器进行编程查找来获取该bean
或
您可以为源类创建一个包装器,并将param传递给该包装器(假设源类的类型为source,目标为Destination):
public class DataWrapper {
String param;
Source wrapped;
public DataWrapper(Source wrapped, String param) {
this.wrapped = wrapped;
this.param = param;
}
public String getParam() {
return param;
}
public Source getWrapped() {
return wrapped;
}
}
然后,您应该编写一个映射配置和自定义转换器,用于将数据包装器类映射到目标类:
<custom-converters>
<converter type="your converter">
<class-a>DataWrapper</class-a>
<class-b>Destination</class-b>
</converter>
</custom-converters>
此转换器将处理参数
并调用从Source
类到Destation
类的映射(映射配置也应该存在):
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass,
Class<?> sourceClass) {
DataWrapper wrapper = (DataWrapper) sourceFieldValue;
String param = wrapper.getParam();
...
return mapper.map(wrapper.getWrapped(), destinationClass);
}
映射可按以下方式使用:
DataWrapper wrapper = new DataWrapper(source, "no:15, name:time, size:4, covert:test");
mapper.map(wrapper, Test.class);
我正在尝试使用DozerJava API使用自定义转换器映射两个Java类。有没有办法在Java中配置类级自定义转换器?现在,我必须在XML中添加配置: 感谢您的帮助!
最初,我得到以下例外:我使用的是推土机5.4。我的类路径中有xerces jar文件。我是推土机新手,非常感谢您的帮助。 org.dozer.MappingException:java.lang.IllegalAccessException:类org.dozer.util.反射Utils不能访问类org.apache.xerces.jaxp.datatype.成员XMLGregorianCalen
我有一个列表,我试图映射到一个二维数组[][]使用推土机和自定义转换器。 转换器只能用于在
但似乎什么都没起作用。
所以很明显,添加类型转换器还有其他方式,我通过显式配置转换服务来搞砸了?有没有一种方法可以注册自定义类型转换器而不踩到其他转换器?
主要内容:JSF自定义转换器实例我们可以在JSF中创建自己的自定义转换器。 以下列表是我们可以在JSF中创建自定义转换器的步骤。 通过实现接口创建一个转换器类。 实现上述接口的和方法。 使用注解为自定义转换器分配唯一的ID。 JSF自定义转换器实例 打开 NetBeans IDE 创建一个Web工程:CustomConverter,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文