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"/>