扫码一下
查看教程更方便
mapstruct 映射器允许抛出特定的异常。 考虑一个自定义映射方法的情况,我们希望在出现无效数据的情况下抛出自定义异常。
@mapper(uses=datemapper.class)
public interface utilitymapper {
carentity getcarentity(car car) throws parseexception;
}
在 映射 enum 章节中更新的打开项目映射。
使用以下代码更新 utilitymapper.java
utilitymapper.java
package com.jiyik.mapper; import com.jiyik.entity.carentity; import com.jiyik.enums.ordertype; import com.jiyik.enums.placedordertype; import com.jiyik.model.car; import org.mapstruct.mapmapping; import org.mapstruct.mapper; import org.mapstruct.valuemapping; import java.text.parseexception; import java.text.simpledateformat; import java.util.date; import java.util.gregoriancalendar; import java.util.map; import java.util.stream.stream; @mapper(uses=datemapper.class) public interface utilitymapper { @mapmapping(valuedateformat = "dd.mm.yyyy") map
getmap(map source); stream getstream(stream source); @valuemapping(source = "extra", target = "special") placedordertype getenum(ordertype order); carentity getcarentity(car car) throws parseexception; } class datemapper { public string asstring(gregoriancalendar date) { return date != null ? new simpledateformat( "yyyy-mm-dd" ) .format( date.gettime() ) : null; } public gregoriancalendar asdate(string date) throws parseexception { date date1 = date != null ? new simpledateformat( "yyyy-mm-dd" ) .parse( date ) : null; if(date1 != null) { return new gregoriancalendar(date1.getyear(), date1.getmonth(),date1.getday()); } return null; } }
使用以下代码更新 utilitymappertest.java
utilitymappertest.java
import com.jiyik.entity.carentity; import com.jiyik.enums.ordertype; import com.jiyik.enums.placedordertype; import com.jiyik.mapper.utilitymapper; import com.jiyik.model.car; import org.junit.test; import org.mapstruct.factory.mappers; import java.text.parseexception; import java.util.arrays; import java.util.gregoriancalendar; import java.util.hashmap; import java.util.map; import java.util.stream.stream; import static org.junit.assert.assertequals; import static org.junit.assert.asserttrue; public class utilitymappertest { private utilitymapper utilitymapper = mappers.getmapper(utilitymapper.class); @test public void testmapmapping() { map
source = new hashmap<>(); source.put(1l, new gregoriancalendar(2015, 3, 5)); map target = utilitymapper.getmap(source); assertequals("2015-04-05", target.get("1")); } @test public void testgetstream() { stream numbers = arrays.aslist(1, 2, 3, 4).stream(); stream strings = utilitymapper.getstream(numbers); assertequals(4, strings.count()); } @test public void testgetenum() { placedordertype placedordertype = utilitymapper.getenum(ordertype.extra); placedordertype placedordertype1 = utilitymapper.getenum(ordertype.normal); placedordertype placedordertype2 = utilitymapper.getenum(ordertype.standard); assertequals(placedordertype.special.name(), placedordertype.name()); assertequals(placedordertype.normal.name(), placedordertype1.name()); assertequals(placedordertype.standard.name(), placedordertype2.name()); } @test public void testgetcar() { car car = new car(); car.setid(1); car.setmanufacturingdate("11/10/2020"); boolean exceptionoccured = false; try { carentity carentity = utilitymapper.getcarentity(car); } catch (parseexception e) { exceptionoccured = true; } asserttrue(exceptionoccured); } }
运行以下命令来测试映射。
$ mvn clean test
执行结果如下