简单而简短的问题:有没有办法在Spring MVC中为自定义@RequestParam类型创建处理程序?
我知道我可以注册自定义WebArgumentResolver
但我无法将这些绑定到参数。让我来描述一下我的用例:
考虑我已经定义了一个模型类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我想自动从数据库加载Account对象,如果它们不存在则返回错误。
答案 0 :(得分:8)
是的,您应该只注册一个自定义属性编辑器:
@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());
}
}
然后,在注册编辑器时,通过注入获取编辑器而不是实例化它。