#java #spring #spring-mvc #data-binding #http-post
#java #spring #spring-mvc #привязка данных #http-post
Вопрос:
прежде всего, я довольно новичок в spring mvc so ..
как springmvc находит правильный класс для создания экземпляра и заполнения его свойств объекта при отправке post-запроса на некоторый контроллер. например, давайте предположим, что у меня есть этот класс
package springmvc_test.user
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
и класс контроллера в качестве текущего
@Controller
@RequestMapping(value = {"/user"} )
public class UserController {
private List<User> users;
@Autowired
public UserController(List<User> users) {
this.users = users;
}
@RequestMapping(value = "/add",method = POST)
public String addUser(User user,Model m){
users.add(user);
//do some other stuf
//.....
}
}
когда я выполняю пост-запрос для http://localhost/myapp/user/add
наряду с полями формы, которые имеют те же имена, что и User
свойства класса,
это работает нормально.
но мой вопрос заключается в том, как springmvc мог найти User
класс и создать его экземпляр? хотя User
класс вообще не снабжен примечаниями
примечание: я знаю, что spring связывает User
свойства объекта, сопоставляя их имена с именами полей формы
Комментарии:
1. Не пропала ли у вас
@ModelAttribute
аннотация кuser
параметру, как описано по этой ссылке baeldung.com/spring-mvc-form-tutorial ?
Ответ №1:
Как указано в ссылке на Spring Framework в соответствующем разделе, вы должны использовать либо:
@RequestBody
если вы хотите, чтобыHttpMessageConverter
ваш HTTP-запрос был десериализован на любой Java, то, если вы хотите, чтобы a, ,,, десериализовал ваш HTTP-запрос на любой JavaObject
@ModelAttribute
если вы хотите получить доступ к переменным модели, например, также из вашего HTTP-запроса.
над параметром, который вы хотите связать с данными вашего запроса.