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

Spring Boot中@RequestBody空值及406不可接受表征问题排查

嘿,针对你遇到的这两个问题,我来帮你逐个排查解决:

问题1:documentToSignRestRequest所有值为null

这个问题核心原因是请求JSON格式错误+POJO绑定不规范,先看你贴的请求JSON:

{
    "obj1": {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
        "key4": "val4"
    },
    "obj2": {
        "key1": "val1",
        "key2": "val2",
        "key3": "val3",
        "key4": "val4"
    },
    "key": "value,  // 这里漏了闭合双引号!
    "arr": [ "whatever" ],
    "key": "value"  // JSON不允许重复键,解析器会直接忽略或报错
}

这里有两个致命的语法错误:

  • "key": "value, 末尾缺少闭合的双引号,应该修正为"key": "value",
  • 存在重复的"key"字段,JSON规范明确禁止对象中有重复键,这会导致解析器无法正确解析整个请求体

除此之外,还要检查你的DocumentToSignRestRequest类:

  • 确保类中字段名和JSON的key完全匹配(注意大小写,比如JSON里是obj1,POJO里不能写成Obj1,如果需要自定义映射可以用@JsonProperty注解)
  • 必须提供无参构造函数和所有字段的getter/setter方法,Spring MVC依赖这些来完成请求参数到POJO的绑定
  • 确认ModelMapper的配置没问题,比如字段名称一致,或者你已经配置了自定义映射规则
问题2:406 Not Acceptable错误

这个错误意味着服务器无法生成你在请求Accept头里指定的媒体类型。结合你的接口配置:

@PostMapping(
    consumes = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE },
    produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }
)

你可以按以下步骤排查:

  1. 检查Postman的请求头:
    • 确保Accept头设置为application/json或者application/xml(比如Accept: application/json),不要设置服务器不支持的类型(比如text/plain)
    • 同时Content-Type头必须是application/json(因为你发送的是JSON请求),要和接口的consumes配置匹配
  2. 确认依赖齐全:
    • 如果是Spring Boot项目,确保引入了spring-boot-starter-web(自带Jackson处理JSON);如果需要支持XML,还要额外引入jackson-dataformat-xml依赖
  3. 检查返回类的序列化能力:
    • DocumentRest类同样需要无参构造函数和getter/setter方法,确保Jackson能把它序列化为JSON或XML格式的响应
  4. 先解决问题1再验证:因为请求参数解析失败可能会触发后续的响应异常,先修复JSON和POJO绑定问题,再看406错误是否消失

额外小技巧

  • 测试时先简化请求JSON,只传1-2个字段,确认参数能正常绑定后再逐步添加完整内容
  • 可以在Controller方法里加个日志打印,方便直观看到请求参数:
    log.info("接收到的请求参数:{}", documentToSignRestRequest);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:15:31