我有這樣的形式與參數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