例如,我有以下接口映射器:
@Mapper
public interface ItemMapper {
static ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);
@Mappings({ @Mapping(source = "number", target = "itemnumber"),
@Mapping(source = "description", target = "description"),
@Mapping(source = "itemClass.name", target = "ic"), @Mapping(source = "optionPart", target = "option"),
@Mapping(source = "plannerCode.code", target = "plannercode"),
@Mapping(source = "plannerCode.name", target = "planner"),
@Mapping(source = "vendor.buyerCode.name", target = "buyer"),
@Mapping(source = "vendor.buyerCode.code", target = "buyerCode"),
@Mapping(source = "vendor.number", target = "vendor"),
@Mapping(source = "vendor.name", target = "vendorName"), @Mapping(source = "pcsItem", target = "pcs"),
@Mapping(source = "specialColourVariant", target = "specialColors"),
@Mapping(source = "qtyBufferGreen", target = "greenLine"),
@Mapping(source = "qtyBufferRed", target = "redine"), @Mapping(source = "leadtime", target = "leadTime"),
@Mapping(source = "qtyStock", target = "stockAC"),
@Mapping(source = "qtyStockSupplier", target = "stockSupplier"),
@Mapping(source = "qtyPurchaseOrder", target = "qtyPo"),
@Mapping(source = "qtyShopOrder", target = "qtySo"),
@Mapping(source = "qtyFirmPlannedOrder", target = "qtyFpo"),
@Mapping(source = "qtyForecast", target = "qtyForecast"),
@Mapping(source = "standardCost", target = "stdCost"),
@Mapping(source = "itemCategory.name", target = "category") })
ItemViewModel itemToDto(Item item);
default String locationToLocationDto(Item item) {
return item.getItemsOnDetailedLocations().iterator().next().getLocation().getLocation();
}
default double locationToBinType(Item item) {
return item.getItemsOnDetailedLocations().iterator().next().getBinType();
}
default double itemToLotsize(Item item) {
double lotSize = 0;
if (item.getLotsize() != null) {
lotSize = item.getLotsize();
} else if (item.getItemsOnDetailedLocations() != null && !item.getItemsOnDetailedLocations().isEmpty()) {
ItemsOnDetailedLocation location = item.getItemsOnDetailedLocations().iterator().next();
lotSize = location.getLotSize();
} else {
lotSize = 0.0;
}
return lotSize;
}
default double stockRails(Item item) {
double value = 0;
for (ItemsOnDetailedLocation detailedLocation : item.getItemsOnDetailedLocations()) {
if (detailedLocation.getId().getSource().equals("RAILS")) {
long lotSize2 = detailedLocation.getLotSize();
long binInStock = detailedLocation.getBinInStock();
if (binInStock != 0) {
value += lotSize2 * (binInStock - 0.5);
}
}
}
return value;
}
}
在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?
因为您有多个返回相同类型的默认方法。您需要使用基于限定符的映射方法选择。
这意味着您需要以以下格式编写映射器:
@Mapper
public interface ItemMapper {
// Omitting other mappings for clarity
@Mapping(source = "item", target = "locationDto", qualifiedByName = "locationDto")
@Mapping(source = "item", target = "binType", qualifiedByName = "binType")
@Mapping(source = "item", target = "lotSize", qualifiedByName = "lotSize")
@Mapping(source = "item", target = "stockRails", qualifiedByName = "stockRails")
ItemViewModel itemToDto(Item item);
@Named("locationDto")
default String locationToLocationDto(Item item) {
//Omitting implementation
}
@Named("binType")
default double locationToBinType(Item item) {
//Omitting implementation
}
@Named("lotSize")
default double itemToLotsize(Item item) {
//Omitting implementation
}
@Named("stockRails")
default double stockRails(Item item) {
//Omitting implementation
}
}
一些重要注意事项:
我有两个对象,除了date成员外,其他成员都相同。在obj1中,date是java.sql.date,obj2.date是long(纪元)。 我需要编写一个映射器来将obj1映射到obj2。这就是我试图做的: 但是mapperImpl只有自己的日期转换实现: 我得到了: 这种转换的正确方式是什么?
以下是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将一个对象转换为另一个对象。我遇到了一些问题,我想找到一个替代方案,这就是我发现MapStruct的方式。 因此,我试图构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数。例如,我想要: 在mapper实现中,我会有如下内容: 如果有人能帮我做到这一点,我将不胜感激,这将节省我很多时间。 提前谢谢。
我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N
我有一个要求,在那里我将从2列像天和月的数据,但我想把它转换成一个日期对象,并把它设置成我的bean类。 这是否可能不添加属性到java类? 我尝试检查自定义结果处理程序,但示例不够清晰。在从select方法返回之前,是否有钩子来运行某种自定义处理程序?
我从一个xml模式生成java类,对于一个复杂类型,我希望jaxb使用一个现有的类,我有一个外部绑定定制文件。自定义类被解组为正确的,除了该类型的单个属性,该属性从未在java类中填充。 下面是类型/类问题的演示。 模式中定义的内容是: 读取匹配xml文件的代码段是: 在这个xml中阅读: 使用JAXB生成的Thing类(不使用自定义xjb),输出符合预期: 使用只有getters的自定义Thin
我正在构建一个REST API, 和ActiveBid类 和我的泽西请求映射器,它具有获取数据的逻辑 有人能帮我吗?我不知道和卡桑德拉共事会这么难。