5

我有这个带有参数的表格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...

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

无法将类型“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 {

我认为当 year 参数不是值(-> catch 异常)时,我可以返回该int0intInteger.parseInt()

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

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

我希望能够:

  • 将字段设置yearint0

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

4

2 回答 2

7

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

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

于 2012-05-07T12:51:33.250 回答
0

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

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

于 2012-05-07T11:47:53.070 回答