推土机,如何通过ID使用自定义转换器?

问题描述 投票:0回答:1

我正在构建一个Sprint引导应用程序,在其中发出请求,然后得到响应。在发出请求之前,我需要转换我的数据。但是,对于相同的Source类而言,要转换的Destination类可能会有所不同。示例:

    public Request getTransformedRequest(Request, String typeTransformation) {
        Request transformedRequest= mapper.map(request,Request.class);
        return transformedRequest;
}

如果我不使用Converters,而我仅使用普通的Dozer映射,则我的mapping.xml中可以包含以下内容;

<mapping map-id="Type1">
  <class-a>ClassA</class-a>
  <class-b>ClassB</class-b>   
</mapping> 
<mapping map-id="Type2">
 <class-a>ClassA</class-a>
 <class-b>ClassC</class-b>   
</mapping> 

然后在我的代码中,对于相同的Source类,我可以使用映射ID进行切换;

  ClassB mapper.map(request,Request.class,"Type1"); //Here ClassB extends Request
  ClassC mapper.map(request,Request.class,"Type2"); //Here ClassC extends Request

我的问题,我不能对转换器执行相同的操作。我想为相同的源类使用不同的转换器:

  <convertertype="CustomConverterType1" >
    <class-a>
      ClassA
    </class-a>
    <class-b>
      ClassB
    </class-b>
  </converter>
 <converter type="CustomConverterType2" >
    <class-a>
      ClassA
    </class-a>
    <class-b>
      ClassC
    </class-b>
  </converter>

所以,在我的场景中,我想选择(就像在映射ID示例中一样)我想要的转换器。我真的很感谢您的帮助。谢谢。

spring dozer
1个回答
0
投票

自定义转换器通常在字段级别使用,以在一对类的整体映射中向客户提供特定字段对的映射。在这种形式下,Dozer将执行其余的映射,并仅与客户转换器一起在现场调用转换器。

<mapping>
    <class-a>ClassA</class-a>
    <class-b>ClassB</class-b>
    <field custom-converter="CustomConverterType1">
        <a>field1</a>
        <b>field1Prime</b>
    </field>
</mapping>
<mapping>
    <class-a>ClassA</class-a>
    <class-b>ClassC</class-b>
    <field custom-converter="CustomConverterType2">
        <a>field1</a>
        <b>field1Prime</b>
    </field>
</mapping>

也可以在类型级别上配置定制转换器,使转换器负责整个映射。与映射相反,这必须在Dozer配置中完成。注意,在这种情况下,转换器负责整个映射。

<configuration>
    <custom-converters>
        <converter type="CustomConverterType1">
            <class-a>ClassA</class-a>
            <class-b>ClassB</class-b>
        </converter>
        <converter type="CustomConverterType2">
            <class-a>ClassA</class-a>
            <class-b>ClassC</class-b>
        </converter>
    </custom-converters>
</configuration>

有关定制转换器的更多信息,请参阅推土机文档。https://dozermapper.github.io/user-guide.pdf

© www.soinside.com 2019 - 2024. All rights reserved.