Spring POST映射接收前端参数为空问题求助
POST请求参数接收为null问题解决
问题描述
浏览器向映射发送POST请求时,传递的参数为空,预期打印语句输出POST请求参数,但实际输出null。使用环境:Java 15、Spring 2.4.3、Thymeleaf 3.0.12.RELEASE。
相关代码
HTML代码
<form method="post" th:action="@{/}"> <input type="search" name="ime-grada" placeholder="ime grada"> </form>
POST映射代码
@Controller public class Post implements WebMvcConfigurer { public static String slikaUrl = "https://openweathermap.org/img/w/"; @PostMapping("/") public String vremePost(Model model, String imeGrada) { System.out.println("post " + imeGrada); // 输出null imeGrada = "Beograd"; // 硬编码用于测试 ArrayList<Root> gradovi = new ArrayList<Root>(); gradovi = PodaciOVremenu.podaciOVremenu(imeGrada); model.addAttribute("gradovi", gradovi); model.addAttribute("slikaUrl", slikaUrl); return Get.vremeGet(model, gradovi); } }
GET映射代码
@Controller public class Get implements WebMvcConfigurer { public static String slikaUrl = "https://openweathermap.org/img/w/"; @GetMapping("/") public static String vremeGet(Model model, ArrayList<Root> gradovi) { if (gradovi.size() == 0) { gradovi = PodaciOVremenu.podaciOVremenu(null); } model.addAttribute("gradovi", gradovi); model.addAttribute("slikaUrl", slikaUrl); return "vreme"; } }
问题原因
表单输入框的name属性值为ime-grada,但POST方法的参数名为imeGrada,Spring MVC默认不会自动将连字符命名的请求参数映射到驼峰命名的方法参数,导致参数接收失败,值为null。
解决方案
方案一:使用@RequestParam指定参数名
在POST方法的参数上添加@RequestParam("ime-grada")注解,明确绑定请求参数名称:
@Controller public class Post implements WebMvcConfigurer { public static String slikaUrl = "https://openweathermap.org/img/w/"; @PostMapping("/") public String vremePost(Model model, @RequestParam("ime-grada") String imeGrada) { System.out.println("post " + imeGrada); // 现在会输出传递的参数值 // imeGrada = "Beograd"; // 注释掉硬编码,测试真实参数 ArrayList<Root> gradovi = new ArrayList<Root>(); gradovi = PodaciOVremenu.podaciOVremenu(imeGrada); model.addAttribute("gradovi", gradovi); model.addAttribute("slikaUrl", slikaUrl); return Get.vremeGet(model, gradovi); } }
方案二:全局开启驼峰-连字符参数映射
如果项目中有大量类似的参数需要映射,可以在Spring MVC配置类中开启驼峰命名与连字符命名的自动转换:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { // 开启请求参数的驼峰-连字符自动转换 configurer.setUseHyphenatedParameters(true); } }
配置后,Spring MVC会自动将ime-grada映射到imeGrada参数,无需再逐个添加@RequestParam注解。
内容的提问来源于stack exchange,提问作者Aleksa Petrovic
相关产品推荐
相关产品推荐

