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

Spring Boot获取application/x-www-form-urlencoded请求数据及报错解决

解决Spring Boot获取form-urlencoded请求数据的问题

你遇到的这个Unsupported Media Type错误,核心原因是:@RequestBody注解默认只支持JSON、XML这类格式的请求体绑定,它没办法直接把application/x-www-form-urlencoded(也就是表单URL编码格式)的数据绑定到Map上,所以才会报错。

下面给你几个简单好用的解决办法:

方法一:用@RequestParam接收参数

这是最直接的方式,不管是单个参数还是所有参数都能搞定:

接收所有参数到Map里

如果不确定参数有哪些,或者想一次性拿到所有表单参数,可以直接用@RequestParam Map<String, String>:

@PostMapping(value = "/res", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Map<String, Object> postResponse(@RequestParam Map<String, String> params) {
    // params里就包含了所有表单键值对,直接用就行
    return Collections.singletonMap("receivedParams", params);
}

逐个接收指定参数

如果参数是固定的,也可以明确指定每个参数的名称,这样更清晰:

@PostMapping(value = "/res", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Map<String, Object> postResponse(@RequestParam("name") String userName,
                                        @RequestParam("email") String userEmail) {
    Map<String, Object> result = new HashMap<>();
    result.put("name", userName);
    result.put("email", userEmail);
    return result;
}

方法二:用实体类接收参数

如果参数比较多,或者想让代码更规整,可以定义一个实体类来对应表单参数,Spring会自动帮你绑定数据:

第一步:定义实体类

记得要给字段加上getter和setter(或者用Lombok的@Data注解简化代码):

public class UserForm {
    private String name;
    private String email;
    private Integer age;

    // 生成getter和setter方法,或者用@Data注解替代
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // 其他字段的getter/setter同理
}

第二步:控制器方法中使用实体类

直接把实体类作为方法参数就行,Spring会自动把表单参数映射到实体的对应字段上:

@PostMapping(value = "/res", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Map<String, Object> postResponse(UserForm userForm) {
    Map<String, Object> result = new HashMap<>();
    result.put("userName", userForm.getName());
    result.put("userEmail", userForm.getEmail());
    return result;
}

额外说明:不推荐的复杂方式

如果非要用@RequestBody结合Map来接收,那需要自定义HttpMessageConverter并注册到Spring容器中,让它支持application/x-www-form-urlencoded格式到Map的转换。但这种方式配置繁琐,除非有特殊业务需求,否则完全没必要——前面两种方法足够解决问题。

内容的提问来源于stack exchange,提问作者user8765332

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:55:33