Это очень легко. Вы можете использовать конвертеры (которые работают как односторонние PropertyEditors, но не сохраняют состояния).
См. Главу 5.5 Преобразование типов пружин 3 в справочнике Spring.
Если такой конвертер зарегистрирован один раз, вам не нужна дополнительная информация, вы можете просто использовать
@RequestMapping(value="/index.html")
public ModelAndView doIndex(@RequestParam Foo param) {
Например, простой конвертер, который загружает объект по его идентификатору:
@Component
@CustomConverter //custom qualifyer
public class BUdToUserConverter implements Converter<String, User> {
@Resource
private UserDao userDao;
@Override
public User convert(String source) {
Integer id = Integer.parse(source);
return this.userDao.getByBusinessId(id);
}
}
«Помощник», который регистрирует все Бины с аннотацией @CustomConverter
public class ApplicationConversionServiceFactoryBean extends FormattingConversionServiceFactoryBean {
@Resource
@CustomConverter
private List<Converter<?, ?>> customConverter;
@Override
protected void installFormatters(final FormatterRegistry registry) {
super.installFormatters(registry);
for (Converter<?, ?> converter : customConverter) {
registry.addConverter(converter);
}
}
}
Как это использовать
UserController {
...
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ModelAndView show(@PathVariable("id") User user) {
return new ModelAndView("users/show", "user", user);
}
}