Spring Web Flow 空白绑定应为 null,而不是空字符串
Spring Web Flow blank binding should be null, not empty String
给定以下视图状态和绑定:
<view-state id="updatePartner" view="/partners/partnerForm" model="partner">
<binder>
<binding property="name" required="true" />
<binding property="address" required="true" />
<binding property="address2" />
<binding property="city" required="true" />
<binding property="state" required="true" />
<binding property="zip" required="true" />
<binding property="phone" required="true" />
</binder>
...
</view-state>
我在 address2 中得到一个带有“”的合作伙伴对象。我想要一个空值。
如何强制使用 null 而不是空白字符串?我想避免将空白字符串强制转换为 nulls
.
的显式 POJO setter
我查看了转换器,但它们似乎从一种类型转换为另一种类型(即 String 到 Long 等),我认为如果我创建一个转换器来转换所有字符串,它会给应用程序带来额外的工作到字符串并使其删除空白字符串,此外,这在理论上可能会破坏其他我不想触及的东西。
我看到了 StringTrimmerEditor 选项 (),我可以看到调用了 InitBinder 方法,但我的 POJO 在 address2 中仍然有“”。
谢谢!
您可以创建自定义转换器:
public class EmptyStringToNullConverter extends StringToObject {
public EmptyStringToNullConverter() {
super(String.class);
}
@Override
protected Object toObject(String string, Class targetClass) throws Exception {
return StringUtils.isNotBlank(string) ? string : null;
}
@Override
protected String toString(Object object) throws Exception {
return object.toString();
}
}
然后添加你的ApplicationConversionService
addConverter("emptyToNullString", new EmptyStringToNullConverter());
那么你可以使用:
<binding property="name" converter="emptyToNullString"/>
给定以下视图状态和绑定:
<view-state id="updatePartner" view="/partners/partnerForm" model="partner">
<binder>
<binding property="name" required="true" />
<binding property="address" required="true" />
<binding property="address2" />
<binding property="city" required="true" />
<binding property="state" required="true" />
<binding property="zip" required="true" />
<binding property="phone" required="true" />
</binder>
...
</view-state>
我在 address2 中得到一个带有“”的合作伙伴对象。我想要一个空值。
如何强制使用 null 而不是空白字符串?我想避免将空白字符串强制转换为 nulls
.
我查看了转换器,但它们似乎从一种类型转换为另一种类型(即 String 到 Long 等),我认为如果我创建一个转换器来转换所有字符串,它会给应用程序带来额外的工作到字符串并使其删除空白字符串,此外,这在理论上可能会破坏其他我不想触及的东西。
我看到了 StringTrimmerEditor 选项 (),我可以看到调用了 InitBinder 方法,但我的 POJO 在 address2 中仍然有“”。
谢谢!
您可以创建自定义转换器:
public class EmptyStringToNullConverter extends StringToObject {
public EmptyStringToNullConverter() {
super(String.class);
}
@Override
protected Object toObject(String string, Class targetClass) throws Exception {
return StringUtils.isNotBlank(string) ? string : null;
}
@Override
protected String toString(Object object) throws Exception {
return object.toString();
}
}
然后添加你的ApplicationConversionService
addConverter("emptyToNullString", new EmptyStringToNullConverter());
那么你可以使用:
<binding property="name" converter="emptyToNullString"/>