Spring新对象绑定异常:无法将String转换为long(原始类型)
操作系统:Windows Vista,框架:Spring(最新),JQuery(最新),Hibernate(最新)。
我有一个主键为id的域类。
public class domain{ private long id;
....
}
我的控制器定义:
@RequestMapping("/domainJqgridData/save")public @ResponseBody String saveJqgridData(DomainClass domainclass) throws Exception {
return "Saved successfully!";
}
提交JSP表单以添加新的DomainClass记录时,Spring控制器将尝试自动将请求参数绑定到域类。它引发如下的BindException:
请求处理失败;嵌套的异常是org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1错误字段“
id”上的对象“
domain”中的字段错误:拒绝值[_empty];代码[typeMismatch.domainclass.id,typeMismatch.id,typeMismatch.long,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:代码[domainclass.id,id];
参数[];
默认消息[id]];默认消息[无法将类型’java.lang.String’的属性值转换为属性’id’的必需类型’long’;嵌套的异常是org.springframework.core.convert.ConversionFailedException:无法将值“
_empty”从“ java.lang.String”类型转换为“
long”类型;嵌套的异常是java.lang.NumberFormatException:
当我添加新的DomainClass记录时,JSP表单将id字段作为null传递。Spring出于绑定目的将null
id转换为空字符串值,并引发错误。我浏览了网络,发现可以为此目的注册自定义编辑器。我将DomainClass基本类型定义long id更改为Long
id,并尝试如下绑定自定义编辑器。
Controller class:@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Long.class, new CustomPrimitiveFormat(Long.class, true));
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
我的自定义基本编辑器类如下:
public class CustomPrimitiveFormat extends CustomNumberEditor{public CustomPrimitiveFormat(Class numberClass, boolean allowEmpty)
throws IllegalArgumentException {
super(numberClass, allowEmpty);
// TODO Auto-generated constructor stub
}
public void setValue(Object value){
System.out.println("Entered CustomPrimitiveFormat setValue");
if (value == null) {
super.setValue(null);
return;
}
if (value.getClass().equals(String.class)){
if (StringUtils.isEmpty((String)value)){
super.setValue(null);
}
}
}
public void setAsText(Object value){
System.out.println("Entered CustomPrimitiveFormat setAsText");
if (value == null) {
super.setValue(null);
return;
}
if (value.getClass().equals(String.class)){
if (StringUtils.isEmpty((String)value)){
super.setValue(null);
}
}
}
}
我仍然收到BindingException。添加新的Domain类记录时,找不到任何指导我如何克服Spring
BindException的链接。我希望我的主键保持原始类型,而不是使用Number对象类型。
在此先感谢您的帮助。
回答:
正如您在错误消息中看到的那样,jqGrid_empty
用作新记录的ID,因此您需要更改将PropertyEditor
其转换_empty
为null
。
以上是 Spring新对象绑定异常:无法将String转换为long(原始类型) 的全部内容, 来源链接: utcz.com/qa/432122.html