自定义@RequestParam类型处理程序

时间:2011-04-18 08:22:54

标签: java spring spring-mvc java-ee

简单而简短的问题:有没有办法在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对象,如果它们不存在则返回错误。

1 个答案:

答案 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());
    }
}

然后,在注册编辑器时,通过注入获取编辑器而不是实例化它。