Spring-mvc不会将我的请求参数绑定到int

时间:2012-05-07 11:26:57

标签: java spring spring-mvc

我的参与资料为yearname

/register?year=&name=test

我的班级看起来像这样:

public class Organizer {
   private String name;
   private int year;

我的控制器将这两个参数映射到我的班级Organizer

@RequestMapping("/register")
public String register(@Valid Organizer organizer, BindingResult errors...

问题是将参数绑定到int。 Spring给了我错误

  

无法将“java.lang.String”类型的属性值转换为属性“year”的必需类型“int”;嵌套异常是java.lang.IllegalArgumentException:

我想出了如何添加自己的自定义属性编辑器,但似乎永远不会调用getValue()

@InitBinder
public void binder(WebDataBinder binder) {
    binder.registerCustomEditor(int.class, new CustomIntEditor());
}

public class CustomIntEditor extends PropertyEditorSupport {

我认为当年份参数不是int值(0 - >捕获异常)时,我将能够返回intInteger.parseInt()

@Override
public void setAsText(String text) throws IllegalArgumentException {

    //Some parsing and error handling
    setValue((int)0);
}

我希望能够:

  • 将字段year设置为int0

  • 创建自定义错误消息:organizer.year.invalid

2 个答案:

答案 0 :(得分:7)

int更改为Integer。这是一个自动装箱问题。由于year为空,因此无法将其转换为原始值(因为您未指定默认值)。

然后,您可以对其进行注释@NotNull以获得所需的验证。

答案 1 :(得分:0)

首先,尝试在调试模式下运行您的应用程序,找出它抛出错误的确切行并提供确切的详细信息
我认为您的数据类型一定存在问题(表单中的声明) 如果你正在使用hibernate,请检查你的hibernate实体类。

并检查年份属性的数据类型。