gpt4 book ai didi

java - MapStruct:根据( boolean )值排除属性

转载 作者:行者123 更新时间:2023-12-01 19:32:00 25 4
gpt4 key购买 nike

我知道 MapStruct 可以忽略未映射的属性和特定的目标属性,但是是否可以根据属性的实际值排除该属性?

我有 boolean 字段,只有当它们为 false 时我才想排除它们。

提前致谢!

示例:

实体:

@Entity
@Table(name = "vehicle")
@Getter @Setter
public class Vehicle {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private boolean hasWheels;
private boolean hasWings;
private boolean hasBrakes;
}

DTO:

@Getter @Setter
public class VehicleDTO {

private String name;
private boolean hasWheels;
private boolean hasWings;
private boolean hasBrakes;
}

MapStruct 映射器:

@Mapper(componentModel = "spring")
public interface VehicleMapper {

// Entity to DTO:
VehicleDTO toVehicleDTO(Vehicle vehicle);
List<VehicleDTO> toVehicleDTOs(List<Vehicle> vehicles);

// DTO to Entity:
Vehicle toVehicle(VehicleDTO vehicleDTO);
}

只有当 boolean 变量的值为“false”时,我才想完全排除它们。

最佳答案

MapStruct 的概念是 Source presence checking 。默认情况下(当发生隐式转换时),它会在将源值分配给目标之前检查源值是否为 null。还有一种方式Checking source property for null arguments通过使用选项 nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,当源非原始数据时,该选项将始终包含 null 检查,除非在源 bean 上定义了源存在检查器。

说了这么多。由于在您的情况下,源属性是原始 boolean 值,因此您可以通过为这些字段添加存在检查来实现这一点。从而消除了对表达式的需要。

例如对于 DTO

@Getter @Setter
public class VehicleDTO {

private String name;
private boolean hasWheels;
private boolean hasWings;
private boolean hasBrakes;

public boolean hasHasWheels() {
return hasWheels;
}
}

这样,实现将首先检查 DTO 是否具有 hasWheels,然后才将其设置为目标。

关于java - MapStruct:根据( boolean )值排除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com