无法将java.lang.String类型的属性值转换为必需的double类型

Nin*_*Boy 8 java spring-mvc

每当我在文本框中输入一个空字符串并尝试保存它时我有这个错误我有这个错误:

Failed to convert property value of type java.lang.String to 
   required type double for property customerAcctSetting.maxAllowableAmount; 
nested exception is java.lang.IllegalArgumentException: Cannot convert value of 
    type [java.lang.String] to required type [double] for 
    property maxAllowableAmount:
PropertyEditor [bp.ar.util.NumberFormatUtil$CustomerDoubleEditor] returned
    inappropriate value
Run Code Online (Sandbox Code Playgroud)

但是,当我输入无效的数字格式,如"ddd"时,我有这个错误:

Failed to convert property value of type java.lang.String to required
    type double for property customerAcctSetting.maxAllowableAmount; 
nested exception is java.lang.NumberFormatException: For input string: "ddd"
Run Code Online (Sandbox Code Playgroud)

我的控制器中有这个活页夹:

@InitBinder
public void initBinder(WebDataBinder binder) {
    NumberFormatUtil.registerDoubleFormat(binder);
}
Run Code Online (Sandbox Code Playgroud)

我有一个NumberFormatUtil.java实现静态函数的类registerDoubleFormat(binder):

NumberFormatUtil.java

public static void registerDoubleFormat (WebDataBinder binder) {
    binder.registerCustomEditor(Double.TYPE, new CustomerDoubleEditor());
}

private static class CustomerDoubleEditor extends PropertyEditorSupport{    
    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)); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我使用Spring 3.0.1.我是java和其他相关技术的新手,比如spring.请帮忙.提前致谢.

Sai*_*Aye 5

在这里改变你的setAsText()方法,

   public void setAsText(String str) { 
       if(str == null || str.trim().equals("")) {
           setValue(0d); // you want to return double
       } else {
           setValue(Double.parseDouble(str)); 
       }
  } 
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 4

我不知道这是否是您问题的原因,但这str == ""是一个错误。

如果您要测试字符串是否为空,请使用str.isEmpty()orstr.length() == 0或 Even "".equals(str)

==运算符测试两个字符串是否是同一个对象。这并不能满足您的要求,因为正在运行的应用程序中可能有许多不同的 String 实例代表相同的字符串。在这方面,空字符串与其他字符串没有什么不同。


即使这不是问题的原因,您也应该修复此错误,并牢记不要使用它==来测试字符串。(或者至少,除非您采取特殊步骤来确保它始终有效……这超出了本问答的范围。)