Я следую этой схеме в приложении Spring.
Я задал в этот другой вопрос , как лучше всего подготовить объект перед заполнением параметров запроса. Ответ заключался в том, что лучше всего было использовать службу преобразования вместо того, чтобы делать это в аннотированном методе @ModelAtribute или с помощью редактора в initBinder.
Я попытался использовать конвертер, но не нашел похожего примера и немного застрял. Я написал код, подобный приведенному ниже: В связывании инициализации я регистрирую службу преобразования. Поэтому перед заполнением значений в пользовательском объекте вызывается метод convert () для загрузки объекта из базы данных. Проблема в том, что эта конфигурация не работает, потому что она преобразует идентификатор (поле имени пользователя) пользователя объекта в пользователя объекта, но затем пытается создать setUsername () с объектом, поэтому я получаю "java.lang .IllegalArgumentException: несоответствие типа аргумента ".
Может ли кто-нибудь дать мне подсказку или пример способа использования ConversionService для достижения желаемого поведения?
Спасибо.
@Autowired
private ConversionService conversionService;
@InitBinder("user")
public void initBinder(@RequestParam("username")String username, WebDataBinder binder){
binder.setConversionService(conversionService);
}
@RequestMapping(value="/user/save", method=RequestMethod.POST)
public String save(@ModelAttribute("user") User user, Model model) {
...
}
примерно таким:
@Component
public class UserConversionService implements ConversionService{
...
@Override
public Object convert(Object name, TypeDescriptor arg1, TypeDescriptor arg2) {
return userService.find((String)name);
}
}