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

Spring MVC调用返回JSON的Web服务遇400错误,如何解决?

解决Spring MVC调用JSON Web服务时的HTTP 400 Bad Request错误

Hey,碰到HTTP 400 Bad Request这个坑,十有八九是你的请求和后端Controller的预期不匹配导致的,我给你梳理几个最常见的原因和对应的解决办法,你可以挨个排查:

1. 请求参数与Controller接收逻辑不匹配

如果是POST请求传递JSON数据,一定要给接收参数的实体类加上@RequestBody注解,不然Spring没法自动把请求体里的JSON转换成Java对象。举个正确的Controller示例:

@PostMapping("/get-json-data")
public String displayData(@RequestBody YourDataEntity data, Model model) {
    // 调用外部Web服务并处理数据
    model.addAttribute("result", data);
    return "data-view";
}

另外,要确保你的Java实体类字段和JSON的key完全匹配(大小写敏感),如果JSON里的key和实体类字段名不一样,记得用@JsonProperty指定别名,比如:

public class YourDataEntity {
    @JsonProperty("user_nickname")
    private String userNickname; // JSON里的key是user_nickname,实体类是userNickname
    
    // 别忘了加getter和setter方法!
    public String getUserNickname() {
        return userNickname;
    }
    public void setUserNickname(String userNickname) {
        this.userNickname = userNickname;
    }
}

2. 请求头Content-Type设置错误

前端发送请求时,必须把Content-Type设置为application/json,否则Spring无法识别请求体里的JSON格式。比如用原生JS发送请求:

fetch('/get-json-data', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({user_nickname: "rasit"})
});

如果用Postman测试,也要在Headers标签里手动添加Content-Type: application/json。

3. JSON本身存在语法错误

JSON格式要求非常严格,比如key必须用双引号包裹、逗号不能漏也不能多、括号要配对。比如下面就是错误的JSON:

{
    user_nickname: "rasit", // key没加双引号
    age: 25, // 多了一个逗号
}

正确的格式应该是:

{
    "user_nickname": "rasit",
    "age": 25
}

这种语法错误会直接导致Spring解析失败,返回400错误。

4. 缺少JSON解析依赖

Spring MVC默认用Jackson来处理JSON和Java对象的转换,如果你的项目里没引入Jackson依赖,就会出现解析失败的情况。如果是Maven项目,在pom.xml里添加:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 选择和Spring版本兼容的版本 -->
</dependency>

5. 请求方法与Controller注解不匹配

比如你的Controller用的是@GetMapping,但前端发送的是POST请求;或者Controller用@PostMapping,前端却用GET传参数,这种不匹配也会触发400错误。一定要确保请求方法(GET/POST/PUT等)和Controller上的注解完全一致。

6. 路径/请求参数类型不匹配

如果用@PathVariable接收路径参数,比如:

@GetMapping("/user/{userId}")
public String getUserInfo(@PathVariable Long userId, Model model) {
    // 处理逻辑
}

如果请求路径是/user/abc,而userId是Long类型,Spring没法把字符串"abc"转换成Long,就会返回400。这时候要确保传递的参数类型和Controller里定义的一致。

你可以先从这几个方向排查,一般都能找到问题所在~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:58:58