我想将字段从源
映射到目标
类,如果源值为空
,我想将其转换为基于数据类型的默认值(“”表示字符串,0表示数值类型等)。对于设置值,我不使用常规的setter,而是使用builder(带有protobuf,因此方法的名称为newbuilder()
和build()
)。
class Source {
private final String value; // getter
}
class Target {
private final String value;
public static Builder newBuilder() {return new Builder()}
public static class Builder {
public static setValue() {/*Set the field*/}
public static Target build() {/*Return the constructed instance*/}
}
我的映射器如下所示:
@Mapper(
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT,
nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT
)
public interface TargetMapper {
Target map(Source source);
}
使用此代码生成的映射器实现调用Target.SetValue(source.GetValue())
,而不是执行null检查并在source返回null
时设置默认值。有趣的是,当我向map
方法添加以下注释时,在实现中出现了空检查。
@Mapping(source="value", target="value", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)
这是构建器中的MapStruct中的一个bug吗?还是我缺少了一些配置来将空映射设置为默认策略,而不是在所有字段映射上重复它?
编辑:由于某种原因,将NullValueCheckStrategy=NullValueCheckStrategy.Always
添加到类级别的@mapper
批注会添加空检查,但不会显式设置值,只是跳过对SetValue
的调用。对于protobuf来说,这是可以的,因为该功能在库中,但是对于其他实现,该字段将保持为空。
@mapping(Source=“value”,target=“value”,nullValuePropertyMappingStrategy=nullValuePropertyMappingStrategy.set_to_default)
应用于update方法(因此具有@mappingtarget
注释参数的方法
常规方法没有真正的对应物:1。NullValueMappingStragegy
应用于bean参数本身。2.NullValueCheckStragegy
会对bean属性执行检查,但不会返回默认值。
@Mapper(
// to perform a null check
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS
)
public interface TargetMapper {
Target map(Source source);
}
// to create a pre-defined object (defaults set a-priori). Not sure
// whether this works with builders.. just try
@ObjectFactory
default Target.Builder create() {
Target.Builder builder = Target.newBuilder();
builder.setValueX( "someDefaultValue" );
return builder;
}
后续问题。有这样的等级制度。其中A是基类: 以及以下内容: 我想将B实例的所有ID映射到B.isVisible()的值,并将C实例的ID映射到TRUE 在最初问题的帮助下,我将其提炼为以下格式: 丑陋的版本是: 有没有帮助改进它,为更优雅的版本提供默认true?
问题内容: 我正在尝试使用Jackson将一些JSON对象映射到Java对象。JSON对象中的某些字段是必填字段(可以用标记),而某些字段是可选字段。 用Jackson映射之后,在JSON对象中未设置的所有字段在Java中都将具有空值。是否有类似的注释可以告诉Jackson为Java类成员设置默认值(如果为null)? 编辑:为了使问题更清楚,这里是一些代码示例。 Java对象: JSON对象可以
我正在尝试用Jackson将一些JSON对象映射到Java对象。JSON对象中的一些字段是强制性的(我可以用标记),而一些字段是可选的。 在与Jackson进行映射之后,JSON对象中没有设置的所有字段在Java中都将有一个空值。是否有类似于的注释可以告诉Jackson为Java类成员设置默认值,以防它为空? 或: 注释只是为了显示我的要求。这不是真正的注解。如果JSON对象与第一个示例类似,我希
我有简单的对象客户端
我正在使用龙目岛的建设者。将默认值分配给我试图使用的一些变量 @建筑商。违约 但问题是,在使用上述注释时,我不再能够通过生成器初始化该值,因为编译器在尝试通过生成器初始化变量时说无法解析方法。 所以,本质上我要寻找的是一种设置默认值的方法,并且在通过构建器启动时仍然能够覆盖。
我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?