扫码一下
查看教程更方便
mapstruct 允许调用自定义逻辑的转换方法。 我们可以使用表达式来实现相同的目的,我们可以传递任何 java 对象并调用其方法进行转换。
@mapping(target = "target-property",
expression = "java(target-method())")
打开使用 dateformat 映射 章节中更新的项目映射。
使用以下代码更新 carentity.java
carentity.java
package com.jiyik.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.jiyik.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.jiyik.mapper; import com.jiyik.entity.carentity; import com.jiyik.model.car; import org.mapstruct.mapper; import org.mapstruct.mapping; import java.text.simpledateformat; import java.util.date; import java.util.gregoriancalendar; @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
import com.jiyik.entity.carentity; import com.jiyik.mapper.carmapper; import com.jiyik.model.car; import org.junit.test; import org.mapstruct.factory.mappers; import java.util.gregoriancalendar; import static org.junit.assert.assertequals; 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
执行结果如下