我有这样的形式与参数year
和name
:弹簧MVC不会绑定我的请求参数为int
/register?year=&name=test
我的类看起来是这样的:
public class Organizer {
private String name;
private int year;
我的控制器的映射两个参数到我的班级Organizer
@RequestMapping("/register")
public String register(@Valid Organizer organizer, BindingResult errors...
问题是bindi将参数年设置为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 {
我想我应该能够返回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
是的工作!以为我可以找到一种方法来使它只与int – Tommy
我想你最初寻找的是一个'ConversionService'('binder.setConversionService(...)'),而不是'CustomEditor'。 ConversionService可以将字符串转换为整数,如果字符串为空,则将整数设置为0。我更喜欢使用非原始类型,因为它使整个事情毫无意义:) – pap
是的,转换是我一直在寻找的功能! – Tommy