弹簧InitBinder:绑定为0的浮动场的空值或空值(Spring InitBinder: bin

2019-08-17 02:19发布

我只是想知道是否有可能告诉的形式空的浮点值将被转换为0的@InitBinder。

我知道,浮球是一个原始数据类型,但我还是想为空或空值转换为0。

如果这是可能的,我怎么能做到这一点?

否则,我将使用一个字符串,而不是一个浮动的只是做一个变通方法

Answer 1:

是的,你总是可以做到这一点.Spring有CustomNumberEditor这是一个可定制的属性编辑器Number的子类整型,长整型,浮点,Double.It被BeanWrapperImpl中已经默认注册,但是,可以通过它注册自定义实例覆盖定制editor.It意味着你可以扩展一个类这样

public class MyCustomNumberEditor extends CustomNumberEditor{

    public MyCustomNumberEditor(Class<? extends Number> numberClass, NumberFormat numberFormat, boolean allowEmpty) throws IllegalArgumentException {
        super(numberClass, numberFormat, allowEmpty);
    }

    public MyCustomNumberEditor(Class<? extends Number> numberClass, boolean allowEmpty) throws IllegalArgumentException {
        super(numberClass, allowEmpty);
    }

    @Override
    public String getAsText() {
        //return super.getAsText();
        return "Your desired text";
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        super.setAsText("set your desired text");
    }

}

然后在你通常控制器注册它:

 @InitBinder
    public void initBinder(WebDataBinder binder) {

       binder.registerCustomEditor(Float.class,new MyCustomNumberEditor(Float.class, true));
    }

这应该做的任务。



Answer 2:

定义CustomNumberEditor为的subclsss作为

import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.util.StringUtils;

public class MyCustomNumberEditor extends CustomNumberEditor {

    public MyCustomNumberEditor(Class<? extends Number> numberClass) throws IllegalArgumentException {
        super(numberClass, true);
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (!StringUtils.hasText(text)) {
            setValue(0);
        }else {
            super.setAsText(text.trim());
        }
    }

}

然后在你的控制器类(我创建了我所有的应用程序控制器一BaseController,我需要这个行为中所有数字基本类型在我的应用程序,所以我简单地定义这个在我BaseController),注册粘合剂的各种基本类型。 需要注意的是MyCustomNumberEditor的构造函数参数必须是数字的子类,而不是原始的类类型。

   @InitBinder
public void registerCustomerBinder(WebDataBinder binder) {
    binder.registerCustomEditor(double.class, new MyCustomNumberEditor(Double.class));
    binder.registerCustomEditor(float.class, new MyCustomNumberEditor(Float.class));
    binder.registerCustomEditor(long.class, new MyCustomNumberEditor(Long.class));
    binder.registerCustomEditor(int.class, new MyCustomNumberEditor(Integer.class));
....    
}


文章来源: Spring InitBinder: bind empty or null values of a float field as 0