我知道MapStruct可以忽略未映射的属性和特定的目标属性,但是否可以根据属性的实际值来删除属性?
我有布尔字段,只有当它们为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);
}
我只想在布尔变量的值为“false”时完全排除它们。
可以使用Jackson忽略空字段。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class VehicleDTO
在下面的方法中,如果值为false,不要只将DTO中的布尔字段设置为。
//实体到DTO:
车辆DTO对车辆DTO(车辆车辆);
您还可以使用Spring BeanUtils来复制和覆盖CopProperties方法。
public static String[] gePropertyNames(Object source) {
final BeanWrapper wrappedSource = new BeanWrapperImpl(source);
return Stream.of(wrappedSource.getPropertyDescriptors())
.map(FeatureDescriptor::getName)
.filter(propertyName -> {
if(wrappedSource.getPropertyValue(propertyName) != null && wrappedSource.getPropertyValue(propertyName) instanceof Boolean){
Boolean value = (Boolean) wrappedSource.getPropertyValue(propertyName);
if(value){
return false;
}else{
return true;
}
}else{
return false;
}
}).toArray(String[]::new);
}
// then use Spring BeanUtils to copy and ignore properties using our function
public static void myCopyProperties(Object src, Object target) {
BeanUtils.copyProperties(src, target, gePropertyNames(src));
}
我不确定在MapStruct中是否有一种干净的方法。一种方法是在mapstruct中使用表达式。我想下面的代码可能会有所帮助。
@Mapper(componentModel = "spring")
public interface VehicleMapper {
@Mapping(target = "hasWheels", expression = "java((hasWheels)?hasWheels:false)")
Vehicle toVehicle(VehicleDTO vehicleDTO);
}
但是,您使用了具有“false”默认值的原始类型布尔变量,尽管您设置或忽略了它。
MapSTRt具有Source存在检查的概念。默认情况下(当发生隐式转换时),它会在将源值分配给目标之前检查源值是否为null
。还有一种通过使用选项nullValueCheckStrategy=NullValueCheckStrategy来检查
,当source是非基元时,它将始终包含null
参数的源属性的方法。ALWAYSnull
检查,除非在源bean上定义了源存在检查器。
说了这么多。因为在您的示例中,源属性是基本布尔属性,所以可以通过为这些字段添加状态检查来实现这一点。这样就不需要表达式了。
e、 g.对于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
,然后才将其设置为目标。
问题内容: 我正在寻找一种基于布尔值对Swift数组进行排序的方法。 我已经使用强制转换为NSArray来工作了: 但是我在寻找Swift变体,有什么想法吗? 更新 感谢Arkku,我设法使用以下代码修复了此问题: 问题答案: 斯威夫特的阵列可以在适当的位置进行排序或用新的阵列。这两个函数的单个参数都是一个闭合,该闭合带有两个元素,如果第一个元素在第二个元素之前被排序,则返回。使用闭包的参数的最短
我有一个布尔值,我需要设置一个基于这个布尔值的条件。我试图得到这个布尔值,然后用它在我的FutureBuilder,但我总是得到空,即使我可以看到值是在火还原。请帮助。 小装置
问题内容: 我有一个表单,用于答复仅在为true 时才想显示的消息,每次单击答复按钮时,我都希望切换是否显示该表单。我怎样才能做到这一点? 问题答案: 您只需要在ng-click事件上切换“ isReplyFormOpen”的值
我得到“删除字面上的”假“布尔值”以下语句错误,但我不确定是否有可能删除假。有什么想法吗?
到目前为止我们看到的类型都能表示很大范围的数据,整数多的是,而浮点数更多。相对而言,字符集的规模小的多。C++中还有一个类型表示的范围更小,即布尔类型,它只能表示true和false两个值。 虽然没提到过该类型,但我们前面几章中实际已经使用过布尔值了。if语句和while语句中的条件就是布尔表达式。比较操作符的结果也是布尔值。例如: if (x == 5) { // 进行某些处理 } ==操
原文: http://exploringjs.com/impatient-js/ch_booleans.html 基本类型 _ 布尔 _ 包含两个值 - false和true: > typeof false 'boolean' > typeof true 'boolean' 14.1。转换为布尔值 这三种方法可以将任意值x转换为布尔值。 Boolean(x) 最具描述性;推荐的。 x ?