Spring Boot表单提交获取空输入问题求助
看起来你在Spring Boot+Thymeleaf的表单提交中遇到了所有输入值都为null的问题,我帮你梳理几个最可能的原因和对应的解决办法:
先检查实体类的属性匹配度与基础结构
你表单里用了th:field="*{_FirstName}",首先要确认你的实体类(比如叫Info)里确实有一个名为_FirstName的属性,而且必须有对应的getter和setter方法——Spring MVC正是通过这些方法来给属性赋值的。如果实体类里的属性是驼峰命名的firstName,那你得把th:field改成*{firstName},字段名必须严格对应,大小写也不能错。
另外,实体类一定要有无参构造函数,如果只写了带参构造,Spring没办法自动实例化对象,自然没法注入值,所有属性都会是null。修正控制器的请求处理逻辑
首先,在跳转到表单页面的GET方法里,你需要把空的实体对象放到Model中,这样Thymeleaf的th:object="${info}"才能找到绑定的对象:@GetMapping("/form") public String showForm(Model model) { model.addAttribute("info", new Info()); // 必须初始化并添加到模型 return "form"; }然后,处理POST请求的
/save方法里,要给参数加上@ModelAttribute("info")注解,确保Spring能正确把表单数据绑定到实体对象上:@PostMapping("/save") public String saveInfo(@ModelAttribute("info") Info info) { // 在这里处理info对象,比如存数据库 return "redirect:/success"; }清理表单里的冗余Thymeleaf属性
你的表单同时写了th:object="${info}"和commandName="info",commandName是Spring MVC的旧属性,和Thymeleaf的th:object功能重复,建议删掉commandName="info",避免出现绑定冲突。另外,th:field会自动生成输入框的name属性,不需要手动设置,保持th:field的表达式和实体类属性一致就好。
按照这几个步骤排查下来,应该就能解决提交后值为null的问题啦。
内容的提问来源于stack exchange,提问作者Fahim Uddin

