Почему не работает привязка данных с формы в Spring MVC?

Ссылка скопирована
1 ответ

Добрый день. Перечитал документацию, гуглил, не нашел в чем проблема.

1. Создаю класс

public class Person { 	 	private int age; 	 	public Person(int age)  	{ 		this.age = age; 	}	 	 	@Override 	public String toString() 	{ 		return String.valueOf(this.age); 	}  }

public class Person { private int age; public Person(int age) { this.age = age; } @Override public String toString() { return String.valueOf(this.age); } }

2. Создаю форму

<form method="post"> <input type="number" name="age"/> <input type="submit"/> </form>

<form method="post"> <input type="number" name="age"/> <input type="submit"/> </form>

3. Создаю обработчик формы

@Controller @RequestMapping("/") public class MainController { @PostMapping 	public String getForm(Person person)	 	{				 		System.out.println(person); 		return "index"; 	} }

@Controller @RequestMapping("/") public class MainController { @PostMapping public String getForm(Person person) { System.out.println(person); return "index"; } }

При вводе числовых данных в поле выдает исключение:
java.lang.IllegalStateException: Cannot resolve parameter names for constructor public mainPackage.Person(int)

При этом, если создать в классе сеттеры и создать конструктор по умолчанию (т.е. без параметров), то всё работает, т.е. привязка идет через сеттеры.
Но вопрос в другом: почему не работает привязка через конструктор?

Дополнительно:

потому что что добавтье конструктрор без аргумнетов

вообще если погуглить то выходит вот что:

мсье знает толк в извращениях а не надо заниматься улучшайзингом
а в исключении бедная ява прямо и говорит

No default constructor found;  nested exception is java.lang.NoSuchMethodException:  example.controller.CastController$Person.<init>()]   at java.lang.Class.getConstructor0(Class.java:3082)     java.lang.Class.getDeclaredConstructor(Class.java:2178)

No default constructor found; nested exception is java.lang.NoSuchMethodException: example.controller.CastController$Person.<init>()] at java.lang.Class.getConstructor0(Class.java:3082) java.lang.Class.getDeclaredConstructor(Class.java:2178)

java.lang.Class.getConstructor0 Class.java:3082 это глубоко

  • сергей кузьмин, если конструктор по умолчанию добавить помимо конструктора с параметрами, тогда идёт привязка через сеттеры. И у меня в ошибке выше пишет, что не может разрешить типы. Ощущение, что в Spring Mvc такая особенность, что привязка только через сеттеры
  • artemfisher,
    верим джентельменам на слово

    чтоб конструктор надо полностью передавать и не форм урленкодед а сериализовать

    @PostMapping(value = "/post", consumes = { 			MediaType.APPLICATION_JSON_VALUE }, produces = { 					MediaType.APPLICATION_JSON_VALUE }) 	public Data post(@RequestBody Data data) {

    @PostMapping(value = "/post", consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE }) public Data post(@RequestBody Data data) {

    в этом примере аннотации умышленно избыточны чтом мало не казалось

  • то есть на мой взгляд можно конечно сильно сесть открыть и прочитать документацию - учение свет и т.п. но для практичесуого применения неясно другими словами зачем так глубоко рыть
    это как сдавать экзамен по химии перед включением зажигания чтобы твердо знать как именно горит бензин
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Проблема с привязкой данных с формы в Spring MVC может возникать по нескольким причинам. Вот несколько возможных причин и их решения:

    1. Неправильное использование аннотации @ModelAttribute: Убедитесь, что вы правильно используете аннотацию @ModelAttribute над методом контроллера, который обрабатывает POST запросы. Эта аннотация позволяет привязывать данные из формы к объекту модели.

    2. Неправильное имя поля в HTML форме: Убедитесь, что имена полей в вашей HTML форме соответствуют именам полей в объекте модели, к которому должны быть привязаны данные. Например, если у вас есть поле "name" в объекте модели, то в HTML форме оно должно быть определено как .

    3. Отсутствие геттеров и сеттеров: Убедитесь, что у вашего объекта модели есть соответствующие геттеры и сеттеры для всех полей, которые вы хотите привязать к форме. Spring MVC использует геттеры и сеттеры для доступа к полям объекта модели.

    4. Ошибки валидации данных: Если у вас есть аннотации валидации на полях объекта модели, убедитесь, что данные из формы проходят эти проверки. Если данные не соответствуют ожидаемому формату, привязка данных может не работать.

    5. Неправильная конфигурация Spring MVC: Проверьте вашу конфигурацию Spring MVC, убедитесь, что все необходимые компоненты и бины правильно сконфигурированы.

    Проанализируйте вышеуказанные причины и убедитесь, что вы правильно настроили привязку данных с формы в Spring MVC. Если проблема остается, попробуйте создать минимальный пример кода, чтобы мы могли более точно определить причину проблемы и помочь вам ее решить.

    @Controller
    public class UserController {
     
        @PostMapping("/user/save")
        public String saveUser(@ModelAttribute User user) {
            // Обработка сохранения пользователя
            return "redirect:/user/list";
        }
    }

    @Controller public class UserController { @PostMapping("/user/save") public String saveUser(@ModelAttribute User user) { // Обработка сохранения пользователя return "redirect:/user/list"; } }

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно