Метод, аннотированный `@InitBinder`, используется в Spring MVC для уточнения того, как следует привязывать поля формы к полям объектов Java. Он часто используется для регистрации пользовательских преобразователей для определенных типов или для настройки форматирования. Однако прямой ручной привязки данных к полям объектов в методе `@InitBinder` не происходит. Вместо этого в `@InitBinder` можно настроить `WebDataBinder`, который затем используется Spring для автоматической привязки данных формы.
Вот пример класса `Person` и метода `@InitBinder`, который регистрирует кастомный редактор свойств для преобразования строковых значений в поля класса `Person`:
```java
public class Person {
private String name;
private int age;
// getters and setters
}
@Controller
public class PersonController {
@InitBinder
protected void initBinder(WebDataBinder binder) {
// Регистрация кастомного преобразователя для поля name
binder.registerCustomEditor(String.class, "name", new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
// Преобразование значения из формы, например, всё к верхнему регистру
setValue(text.toUpperCase());
}
});
// Регистрация других кастомных преобразователей, если необходимо
}
@PostMapping("/person")
public String submit(@ModelAttribute Person person) {
// манипуляции с person
return "personView";
}
}
```
В примере выше `@ModelAttribute` используется в методе обработки запроса `submit` для автоматической привязки данных отправленной формы к объекту `Person` с использованием `WebDataBinder`, который был настроен в методе `initBinder`.
Напрямую связать поля запроса с полями объекта можно внутри метода, обрабатывающего запрос (например, `submit`), используя аннотацию `@RequestParam`, вот так:
```java
@PostMapping("/person")
public String submit(@RequestParam("name") String name,
@RequestParam("age") int age,
Model model) {
Person person = new Person();
person.setName(name);
person.setAge(age);
// манипуляции с person...
model.addAttribute("person", person);
return "personView";
}
```
В этом примере вы явно забираете значения запроса с помощью `@RequestParam` и затем устанавливаете их вручную в поля объекта `Person`. Это не использует `@InitBinder`, но демонстрирует способ ручной работы с данными запроса.