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

Spring Controller POST接口接收可选参数JSON时出现404问题

解决Spring Boot POST接口接收部分字段JSON时404的问题

首先得明确:404错误的核心是请求路径没匹配到任何控制器方法,咱们先从最基础的路径匹配问题排查,再逐步验证其他潜在因素:

1. 先确认端口与请求路径完全匹配

你的curl请求用的是http://localhost:4569/rest/publish/post,请先核对Spring Boot应用的配置:

  • 检查application.properties或application.yml里的server.port是不是确实设为4569,端口不匹配直接会导致404。
  • 如果配置了server.servlet.context-path(比如/myapp),那请求路径得改成http://localhost:4569/myapp/rest/publish/post,别漏掉上下文路径。

2. 验证控制器的映射是否生效

虽然你的控制器代码看起来没问题,但可以通过日志确认:

  • 启动应用后,查看控制台输出,Spring Boot会打印所有已映射的接口信息,比如类似这样的日志:
    o.s.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping : Mapped "{[/rest/publish/post],methods=[POST],consumes=[application/json]}" onto public java.lang.String com.example.demo.SocialController.publish(com.example.demo.Post)
    
    确认这条日志存在,且路径、请求方法、consumes类型和你的请求完全匹配。
  • 尝试用全字段的JSON请求测试,如果全字段请求能正常返回,说明路径是对的,那部分字段请求的404大概率是请求时的拼写错误(比如把owner写成ownr,或者路径输错)。

3. 确保JSON反序列化兼容部分字段

虽然404不是反序列化问题,但咱们可以给Post类加个兜底配置,避免因未知字段导致意外问题:
在Post类上添加@JsonIgnoreProperties(ignoreUnknown = true),这样即使请求里有类中未定义的字段,也不会触发反序列化失败:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Post {
    // 原属性、内部类及getter/setter保持不变
}

另外你的Post类结构是正确的:内部类Text是静态的(Jackson必须用静态内部类才能解析嵌套对象),且所有属性都有getter/setter,这部分没问题。

4. 换工具验证排除curl语法问题

如果curl请求还是有问题,可以用Postman或者IntelliJ的HTTP Client工具重新构造请求,排除curl命令的语法错误:
比如IntelliJ的HTTP请求示例:

POST http://localhost:4569/rest/publish/post
Content-Type: application/json

{
  "owner": "Owner of the Company",
  "text": {
    "text": "Png new image"
  }
}

总结

优先排查端口、路径拼写、上下文路径这几个最容易引发404的点,因为反序列化失败只会返回400 Bad Request,不会出现404。如果全字段请求正常,部分字段请求404,那肯定是请求时的路径或字段拼写有误,仔细核对就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:36:00