有没有办法使用 MapStruct 将空字符串映射到 null?
Is there a way to map an empty String to null using MapStruct?
我在 Spring 引导应用程序中使用 MapStruct 将 DTO 映射到实体,反之亦然。
有没有办法使用 @Mapping
将空字符串映射到 null?
您只需在 @Mapping
中使用 expression
@Mapping(target = "name", expression = "java(source.name.isEmpty() ? null : source.name)")
Dog convert(Cat source);
可以使用 中建议的表达式。我个人更喜欢这样做更安全一点,也许更明确一点。
@Mapper
public interface MyMapper {
@Mapping( target = "s2", qualifiedBy = EmptyStringToNull.class )
Target map( Source source);
@EmptyStringToNull
default String emptyStringToNull(String s) {
return s.isEmpty() ? null : s;
}
@Qualifier
@java.lang.annotation.Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface EmptyStringToNull {
}
class Source {
private String s1;
private String s2;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
class Target {
private String s1;
private String s2;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
}
您可以根据需要多次重复使用 EmptyStringToNull
限定符,并且不依赖于参数名称。
如果您希望它在映射器中全局工作 class 并拦截任何 String-Mappings 您可以简单地实现以下内容:
default String mapEmptyString(String string) {
string != null && !string.isEmpty() ? string : null;
}
这会将任何 null
或空 String
源映射到 null
。
我在 Spring 引导应用程序中使用 MapStruct 将 DTO 映射到实体,反之亦然。
有没有办法使用 @Mapping
将空字符串映射到 null?
您只需在 @Mapping
expression
@Mapping(target = "name", expression = "java(source.name.isEmpty() ? null : source.name)")
Dog convert(Cat source);
可以使用
@Mapper
public interface MyMapper {
@Mapping( target = "s2", qualifiedBy = EmptyStringToNull.class )
Target map( Source source);
@EmptyStringToNull
default String emptyStringToNull(String s) {
return s.isEmpty() ? null : s;
}
@Qualifier
@java.lang.annotation.Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface EmptyStringToNull {
}
class Source {
private String s1;
private String s2;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
class Target {
private String s1;
private String s2;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
}
您可以根据需要多次重复使用 EmptyStringToNull
限定符,并且不依赖于参数名称。
如果您希望它在映射器中全局工作 class 并拦截任何 String-Mappings 您可以简单地实现以下内容:
default String mapEmptyString(String string) {
string != null && !string.isEmpty() ? string : null;
}
这会将任何 null
或空 String
源映射到 null
。