<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.5.2</version> </dependency>
pom文件 導入dozer相關的 依賴
在resource下 創建 dozer對應的 xml 配置文件
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <mapping> <class-a>com.aila.vo.OrderVo</class-a> <class-b>com.aila.bo.OrderBo</class-b> <field> <a>orderVoExtList</a> <b>orderBoExtList</b> </field> </mapping> </mappings>
實體類相關代碼
package com.aila.vo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.List; /** * @author chenzhichao * @date 2021/7/7 9:33 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderVo { private String name; private List<OrderVoExt> orderVoExtList; }
package com.aila.vo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.List; /** * @author chenzhichao * @date 2021/7/7 9:33 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderVoExt { private Long skuId; private List<Long> numberList; private OrderVoExtComplex voComplex; }
package com.aila.vo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * @author chenzhichao * @date 2021/7/7 9:42 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderVoExtComplex { private String value; }
package com.aila.bo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.List; /** * @author chenzhichao * @date 2021/7/7 9:33 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderBo { private String name; private List<OrderBoExt> orderBoExtList; }
package com.aila.bo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.List; /** * @author chenzhichao * @date 2021/7/7 9:33 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderBoExt { private Long skuId; private List<Long> numberList; private OrderBoExtComplex boComplex; }
package com.aila.bo; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * @author chenzhichao * @date 2021/7/7 9:41 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class OrderBoExtComplex { private String value; }
測試類相關代碼
import com.aila.MyBootApplication; import com.aila.bo.OrderBo; import com.aila.vo.OrderVo; import com.aila.vo.OrderVoExt; import com.aila.vo.OrderVoExtComplex; import com.github.dozermapper.core.Mapper; import com.google.gson.Gson; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.util.Arrays; /** * @author chenzhichao * @date 2021/6/18 15:09 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = MyBootApplication.class) public class MyTestYy { /*@Resource private RedissonClient redisson;*/ @Resource private Mapper mapper; @Resource private Gson gson; @Test public void test(){ /*RKeys keys = redisson.getKeys(); System.out.println(keys); String key="123"; MyWork002 work002 = new MyWork002(); MyTask002 myTask002 = new MyTask002("A", key, redisson,work002); MyTask002 myTask003 = new MyTask002("B", key, redisson,work002); new Thread(myTask002).start(); new Thread(myTask003).start(); System.out.println("123");*/ } @Test public void dozerTest(){ OrderVo vo = new OrderVo(); vo.setName("testName"); OrderVoExt voExt = new OrderVoExt(); voExt.setSkuId(3L).setNumberList(Arrays.asList(1L,2L,3L)); OrderVoExtComplex extComplex = new OrderVoExtComplex(); extComplex.setValue("testValues"); voExt.setVoComplex(extComplex); vo.setOrderVoExtList(Arrays.asList(voExt)); OrderBo bo = mapper.map(vo, OrderBo.class); String json = gson.toJson(bo); System.out.println(json); } }
結果:
結論1:如果兩個對象之間的 屬性名稱不一致 不能直接 轉換 ,但是可以通過xml來指定需要轉換的對象
但是不清楚 如果指定的 兩個屬性 都是復雜屬性是否也能通過xml 進行轉換
繼續測試
向xml中添加 ext的xml配置
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <mapping> <class-a>com.aila.vo.OrderVo</class-a> <class-b>com.aila.bo.OrderBo</class-b> <field> <a>orderVoExtList</a> <b>orderBoExtList</b> </field> </mapping> <mapping> <class-a>com.aila.vo.OrderVoExt</class-a> <class-b>com.aila.bo.OrderBoExt</class-b> <field> <a>voComplex</a> <b>boComplex</b> </field> </mapping> </mappings>
執行代碼結果:
結論 :如果 轉化的 成員屬性是復雜對象 則需要 在配置 這個復雜對象的 轉化對象 否則無法 轉化
最后附上配置代碼
package com.aila.config; import com.github.dozermapper.core.DozerBeanMapperBuilder; import com.github.dozermapper.core.Mapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * dozer 配置 * @author czc */ @Configuration public class DozerConfig { @Bean public Mapper getDozerMapper(@Value("classpath*:mappings/*.xml") Resource[] resources) { List<String> fileNameList = Arrays.stream(resources).map(resource -> "mappings/"+resource.getFilename()).collect(Collectors.toList()); Mapper mapper = DozerBeanMapperBuilder.create().withMappingFiles(fileNameList).build(); return mapper; } }