如何在spring mvc中将空数字字段绑定到默认值0

时间:2015-02-11 11:29:53

标签: java spring jsp spring-mvc model-view-controller

我的jsp表单中有一些数字字段(但不是必须的) 例如。 kkqty,sogoqty和sesaqty。 因此,当用户没有在这些字段中给出任何输入时,我在控制器端接收Null,因此在保存这些表单数据时获得null属性异常

我的POJO(OutletInfo.java)

 private Double kkqty;
 private Double sogoqty;
 private Double sesaqty;

//getter & setters

@Column(name = "KKqty", nullable = false, precision = 10)
public Double getKkqty() {
    return this.kkqty;
}

public void setKkqty(Double kkqty) {
    this.kkqty = kkqty;
}

@Column(name = "sogoqty", nullable = false, precision = 10)
public Double getSogoqty() {
    return this.sogoqty;
}

public void setSogoqty(Double sogoqty) {
    this.sogoqty = sogoqty;
}

@Column(name = "sesaqty", nullable = false, precision = 10)
public Double getSesaqty() {
    return this.sesaqty;
}

我的控制器

@RequestMapping(value = "saveOutletInfo", method = RequestMethod.POST)
public @ResponseBody String saveOutletInfo(OutletInfo outletInfo,HttpServletRequest request){

    System.out.print("KKQTY:"+outletInfo.getKkqty());               
    return this.getMasterService().saveOutletInfo(outletInfo);      
}

在控制器中,当我尝试打印所有数字字段时,我在此处收到空值,因此无法保存。

我需要将null而不是null转换为默认值0.0 一种方式我知道我需要检查所有字段,如果为null然后将其设置为0.0,但这几乎是硬编码,所以我想在这种情况下自动转换。

我经历了一些帖子并且遇到了关于@InitBinder但在这种情况下我无法使用它。

类似

@InitBinder
     public void initBinder(WebDataBinder binder){
        binder.registerCustomEditor(Double.class,new CustomNumberEditor(Double.class,true));

     }

任何人都可以建议我如何在它为空时自动将我的所有数字字段转换为0.0。

1 个答案:

答案 0 :(得分:1)

您可以设置全局init-binder,例如

@ControllerAdvice
public class GlobalBindingInitializer {

 /* global InitBinder  */

 @InitBinder
 public void binder(WebDataBinder binder) {
  binder.registerCustomEditor(Double.class, new CustomDoubleEditor());
 }
}

并注册以下编辑器

public class CustomDoubleEditor extends PropertyEditorSupport {
    public CustomDoubleEditor() {
    }

    public String getAsText() {
        Double d = (Double) getValue();
        return d.toString();
    }

    public void setAsText(String str) {
        if (str == "" || str == null)
            setValue(0);
        else
            setValue(Double.parseDouble(str));
    }
} 

但是,在您的上下文中,更合适的解决方案似乎是简单地初始化实例变量或将默认构造函数设置为值0

private Double kkqty = 0.0;
private Double sogoqty = 0.0;
private Double sesaqty = 0.0;