ConversionService в Spring

Я следую этой схеме в приложении Spring.

  1. Запрос отправляется на сервер с идентификатором объекта и некоторыми другими параметрами, которые должны быть заполнены в этом объекте.
  2. Объект с этим идентификатором загружается из базы данных.
  3. геттеры и сеттеры вызываются в этом объекте для заполнить значения
  4. объект затем сохраняется

Я задал в этот другой вопрос , как лучше всего подготовить объект перед заполнением параметров запроса. Ответ заключался в том, что лучше всего было использовать службу преобразования вместо того, чтобы делать это в аннотированном методе @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); 
    }
}

25
задан Community 23 May 2017 в 12:16
поделиться