【问题标题】:How to provide custom converter param at runtime in Dozer component?如何在 Dozer 组件运行时提供自定义转换器参数?
【发布时间】:2015-10-13 01:29:47
【问题描述】:

我已经使用 Dozer 字段级别映射实现了带有静态自定义转换器参数的自定义转换器。但就我而言,自定义转换器参数会随时更改,我需要动态传递它们。

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>

【问题讨论】:

    标签: dozer converters


    【解决方案1】:

    如果您使用依赖注入框架,您可以将参数添加到某个 bean 并通过自定义转换器的编程查找来获取该 bean

    您可以为源类创建一个包装器并将参数传递给此包装器(假设源类的类型为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;
        }
    }
    

    然后您应该编写一个映射配置和自定义转换器,用于将DataWrapper 类映射到您的Destination 类:

        <custom-converters>
            <converter type="your converter">
                <class-a>DataWrapper</class-a>
                <class-b>Destination</class-b>
            </converter>
        </custom-converters>
    

    此转换器将处理param 并调用从Source 类到Destination 类的映射(映射配置也应该存在):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多