2011-04-18 148 views
1

簡單和短的問題:是否有辦法在Spring MVC中爲自定義@RequestParam類型創建處理程序?自定義@RequestParam類型處理程序

我知道我可以註冊自定義WebArgumentResolver s但我不能將這些參數綁定。讓我來描述一下我的使用案例:

考慮我已經定義了一個模型類Account

public class Account { 
    private int id; 
    private String name; 
    private String email; 
} 

我的請求處理方法如下所示:

@RequestMapping("/mycontroller") 
public void test(Account account1, Account account2) { 
    //... 
} 

如果我提出一個要求mydomain.com/mycontroller?account1 = 23 & account2 = 12我想從數據庫中自動加載帳戶對象,並返回一個錯誤,如果他們不存在。

回答

7

是的,你應該只註冊自定義屬性編輯器:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(CustomType.class, 
     new CustomTypePropertyEditor()); 
} 

更新:既然你需要訪問DAO,你需要的屬性編輯器作爲一個Spring bean。喜歡的東西:

@Component 
public class AccountPropertyEditor extends PropertyEditorSupport { 
    @Inject 
    private AccountDAO accountDao; 
    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     setValue(accountDao.getById(Integer.parseInt(text))); 
    } 

    @Override 
    public String getAsText() { 
     return String.valueOf(((Account) getValue()).getId()); 
    } 
} 

然後,註冊編輯器時,獲得通過注射的編輯器,而不是將其實例化。

+0

我更新了我的帖子。 FYI – Erik 2011-04-18 08:38:57

+0

@Erik看到更新 – Bozho 2011-04-18 08:43:37

+0

偉大的解決方案。謝謝! – Erik 2011-04-18 09:25:51