Пользовательский обработчик типа @RequestParam - PullRequest
2 голосов
/ 18 апреля 2011

Простой и короткий вопрос: есть ли способ создать обработчик для пользовательских типов @RequestParam в Spring MVC?

Я знаю, что могу зарегистрировать пользовательские 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 Я хотел бы автоматически загрузить объекты Account из базы данных и вернуть ошибку, если их не существует.

1 Ответ

8 голосов
/ 18 апреля 2011

Да, вам просто нужно зарегистрировать пользовательский редактор свойств:

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

Обновление: Поскольку вам необходим доступ к DAO, вам нужен редактор свойств в виде пружинного компонента. Что-то вроде:

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

И затем, при регистрации редактора, получите редактор с помощью инъекции, а не создайте его экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...