Spring Web Flow空白绑定应该为null,而不是空String

时间:2016-04-16 02:38:40

标签: java spring thymeleaf spring-webflow

给出以下视图状态和绑定:

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

我正在使用&#34;&#34;获得合作伙伴对象在地址2。我想要那里的空白。

如何强制使用null而不是空字符串?我想避免明确的POJO设置器将空字符串强制转换为nulls

我看过转换器,但是那些似乎从一种类型转换为另一种类型(即String转换为Long等),如果我创建了一个转换器来将所有字符串转换为字符串,我认为它将为应用程序创建额外的工作并且它删除了空白字符串,此外,理论上可以打破其他我不想触及的事情。

我已经看过StringTrimmerEditor选项(https://stackoverflow.com/a/2977863/3810920),我可以看到InitBinder方法被调用,但我的POJO仍然有&#34;&#34;在地址2中。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以创建自定义转换器:

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