【问题标题】:Spring-mvc won't bind my request parameter to intSpring-mvc 不会将我的请求参数绑定到 int
【发布时间】:2012-05-07 20:51:33
【问题描述】:

我有这个带有参数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。 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 值时,我可以返回int0Integer.parseInt() -> 捕获异常)

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

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

我希望能够:

  • 将字段year设置为int0

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

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

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

    然后你可以注释它@NotNull 以获得你想要的验证。

    【讨论】:

    • 是的,有效!以为我可以找到一种方法让它与 int 一起工作
    • 我认为您最初寻找的是ConversionService (binder.setConversionService(...)),而不是CustomEditor。一个可以从 String 转换为 Integer 的 ConversionService,如果 String 为空,则将 Integer 设置为 0。我更喜欢使用非原始类型,因为它使整个事情变得毫无意义:)
    • 是的,转换是我一直在寻找的功能!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 2016-04-28
      • 1970-01-01
      • 2015-03-28
      • 2012-11-22
      • 1970-01-01
      相关资源
      最近更新 更多