当我输入" 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"]
答案 0 :(得分:1)
我不会说客户端的验证是“最好的”,因为它们可以很容易地避免(从表单中取出action
url,发布一些垃圾),但它可能是最容易做到的。
我建议在服务器端添加验证。您已准备好注释,现在必须在@Valid
和Code code
参数上使用BindingResult
。 http://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
}