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其转换_emptynull

以上是 Spring新对象绑定异常:无法将String转换为long(原始类型) 的全部内容, 来源链接: utcz.com/qa/432122.html

回到顶部