类型不匹配,Spring BindException

时间:2015-04-02 04:45:09

标签: java spring validation exception data-binding

当我输入" adsf"等字母表时在输入字段中,spring尝试将其绑定到我的" Code"的价格(双重)属性。对象,这会导致绑定异常。如果我想将该字段保持为双倍,我该怎么做才能避免此错误?

POJO

@entity
@Table(name=“CODE”)
public class Code{

    @Column(name=“PRICE”)
    @NotNull
    @DecimalMax(value=“999999999999.999999”)
    @DemimalMin(value=“0.0”)
    private Double price;

    //getters and setters

}

我的控制器

@RequestMapping(value=“validateField”, method=RequestMethod.POST, produces=“application/json”)
public FieldValidatinResult validateField(final Code code, final String field){
    //return statement
}

html page

<input type=“text” class=“form-control validatable” id=“price”></input>

错误讯息:

    Field error in object ‘code’ on field ‘price’: rejected value [adsf]; 
codes[typeMismatch.code.price,typeMismatch.price,typeMismatch.java.lang.Double,typeMismatch]; arguments[org.springframework.context.support.DefaultMessageSourceResolvable: 
codes [code.price,price]; arguments []; default message [price]]; default message 
[Failed to convert property value of type 'java.lang.String' to required type 
'java.lang.Double' for property 'price'; nested exception is 
java.lang.NumberFormatException: For input string: "adsf"]

2 个答案:

答案 0 :(得分:1)

我不会说客户端的验证是“最好的”,因为它们可以很容易地避免(从表单中取出action url,发布一些垃圾),但它可能是最容易做到的。

我建议在服务器端添加验证。您已准备好注释,现在必须在@ValidCode code参数上使用BindingResulthttp://codetutr.com/2013/05/28/spring-mvc-form-validation/&lt; - 这似乎是一些有用的教程。

答案 1 :(得分:0)

错误清楚地说

  

[无法转换类型&#39; java.lang.String&#39;的属性值要求的类型   &#39; java.lang.Double中&#39;对于财产&#39;价格&#39 ;;嵌套异常是   java.lang.NumberFormatException:对于输入字符串:&#34; adsf&#34;]

用户提供了非数字输入,当它在服务器上解析为double时,它会抛出NumberFormatException。解决这个问题的最佳方法是处理客户端问题。在提交表单之前添加如下所示的验证

if (!isNaN(parseInt($("#price").val()))) {
    //proceed with form submit
}