
- MapStruct 教程
- MapStruct - 首頁
- MapStruct - 概述
- MapStruct - 環境設定
- 對映
- MapStruct - 基本對映
- MapStruct - 自定義對映
- MapStruct - 多個對映
- MapStruct - 巢狀 Bean 對映
- MapStruct - 直接欄位對映
- MapStruct - 構建器
- 資料型別轉換
- MapStruct - 隱式型別轉換
- MapStruct - 使用 numberFormat
- MapStruct - 使用 dateFormat
- MapStruct - 使用表示式
- MapStruct - 使用常量
- MapStruct - 使用 defaultValue
- MapStruct - 使用 defaultExpression
- 集合對映
- MapStruct - 列表對映
- MapStruct - Map 對映
- 其他
- MapStruct - 流對映
- MapStruct - 列舉對映
- MapStruct - 丟擲異常
- MapStruct - 自定義對映器
- MapStruct 有用資源
- MapStruct - 快速指南
- MapStruct - 有用資源
- MapStruct - 討論
MapStruct - 使用表示式
MapStruct 允許為自定義邏輯呼叫轉換方法。我們可以使用表示式來實現相同的功能,其中我們可以傳遞任何 Java 物件並呼叫其方法來進行轉換。
語法
@Mapping(target = "target-property", expression = "java(target-method())")
這裡
目標屬性 - 我們正在進行對映的屬性。
表示式 - 對映器將呼叫表示式中編寫的 Java 方法。
目標方法 - 目標方法是要呼叫的方法。如果方法存在於不同的類中,則使用 new 類名.目標方法()
示例
在 Eclipse 中開啟在 使用 dateFormat 對映 章節中更新的專案對映。
使用以下程式碼更新 CarEntity.java -
CarEntity.java
package com.tutorialspoint.entity; import java.util.GregorianCalendar; public class CarEntity { private int id; private double price; private GregorianCalendar manufacturingDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public GregorianCalendar getManufacturingDate() { return manufacturingDate; } public void setManufacturingDate(GregorianCalendar manufacturingDate) { this.manufacturingDate = manufacturingDate; } }
使用以下程式碼更新 Car.java -
Car.java
package com.tutorialspoint.model; public class Car { private int id; private String price; private String manufacturingDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getManufacturingDate() { return manufacturingDate; } public void setManufacturingDate(String manufacturingDate) { this.manufacturingDate = manufacturingDate; } }
使用以下程式碼更新 CarMapper.java -
CarMapper.java
package com.tutorialspoint.mapper; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import com.tutorialspoint.entity.CarEntity; import com.tutorialspoint.model.Car; @Mapper public interface CarMapper { @Mapping(source = "price", target = "price", numberFormat = "$#.00") @Mapping(target = "manufacturingDate", expression = "java(getManufacturingDate(carEntity.getManufacturingDate()))") Car getModelFromEntity(CarEntity carEntity); default String getManufacturingDate(GregorianCalendar manufacturingDate) { Date d = manufacturingDate.getTime(); SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy" ); return sdf.format( d ); } }
使用以下程式碼更新 CarMapperTest.java -
CarMapperTest.java
package com.tutorialspoint.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.GregorianCalendar; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; import com.tutorialspoint.entity.CarEntity; import com.tutorialspoint.mapper.CarMapper; import com.tutorialspoint.model.Car; public class CarMapperTest { private CarMapper carMapper = Mappers.getMapper(CarMapper.class); @Test public void testEntityToModel() { CarEntity entity = new CarEntity(); entity.setPrice(345000); entity.setId(1); entity.setManufacturingDate(new GregorianCalendar(2015, 3, 5)); Car model = carMapper.getModelFromEntity(entity); assertEquals(model.getPrice(), "$345000.00"); assertEquals(entity.getId(), model.getId()); assertEquals("05.04.2015", model.getManufacturingDate()); } }
執行以下命令來測試對映。
mvn clean test
輸出
命令成功後。驗證輸出。
mvn clean test [INFO] Scanning for projects... ... [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mapping --- [INFO] Surefire report directory: \mvn\mapping\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.tutorialspoint.mapping.CarMapperTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.035 sec Running com.tutorialspoint.mapping.DeliveryAddressMapperTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running com.tutorialspoint.mapping.StudentMapperTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Results : Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 ...
廣告