我的参与资料为year
和name
:
/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
- >捕获异常)时,我将能够返回int
值Integer.parseInt()
@Override
public void setAsText(String text) throws IllegalArgumentException {
//Some parsing and error handling
setValue((int)0);
}
我希望能够:
将字段year
设置为int
值0
创建自定义错误消息:organizer.year.invalid
答案 0 :(得分:7)
将int
更改为Integer
。这是一个自动装箱问题。由于year
为空,因此无法将其转换为原始值(因为您未指定默认值)。
然后,您可以对其进行注释@NotNull
以获得所需的验证。
答案 1 :(得分:0)
首先,尝试在调试模式下运行您的应用程序,找出它抛出错误的确切行并提供确切的详细信息
我认为您的数据类型一定存在问题(表单中的声明)
如果你正在使用hibernate,请检查你的hibernate实体类。
并检查年份属性的数据类型。