You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:05:39