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

REST接口返回HTTP 400 Bad Request错误求助

问题排查与修复方案

结合你描述的场景(本地Eclipse运行正常、Tomcat部署WAR后报BAD Request),以及提供的代码片段,我整理出几个核心问题和对应的修复方案:

1. GET请求与@RequestBody的冲突(核心原因)

这是导致BAD Request的关键:@RequestBody注解是用来从HTTP请求体中解析参数的,但HTTP规范里GET请求本身没有请求体(GET仅通过URL参数传递数据)。

你本地测试时可能默认用了POST请求(或测试工具自动做了兼容处理),所以没触发错误;但部署到Tomcat后用GET访问/testing接口时,Tomcat无法解析不存在的请求体,直接返回BAD Request。

修复方案二选一:

  • 如果需要接收Test对象的结构化数据,把请求方法改为POST:
    @Controller
    public class RESTController{
        @RequestMapping(value="testing", method=RequestMethod.POST)
        public @ResponseBody String TestingXml(HttpServletRequest request, @RequestBody Test test){
            String welcome=test.getName();
            return welcome;
        }
    }
    
  • 如果必须用GET请求,改用@RequestParam接收参数:
    @Controller
    public class RESTController{
        @RequestMapping(value="testing", method=RequestMethod.GET)
        public @ResponseBody String TestingXml(HttpServletRequest request, @RequestParam("name") String name){
            String welcome=name;
            return welcome;
        }
    }
    

2. 代码中的语法错误

你代码里有几处大小写/拼写问题,虽然Eclipse可能自动修正,但打包WAR时如果没修复会引发类加载异常:

  • Request method.GET 应改为 RequestMethod.GET(RequestMethod是Spring的标准枚举类)
  • Public 应改为 public(Java是大小写敏感语言,方法修饰符必须小写)

3. 额外排查点

如果上述修复后仍有问题,可以检查:

  • 本地Eclipse使用的Tomcat版本与部署服务器的Tomcat版本是否一致,避免版本兼容问题
  • 确认WAR包中包含所有依赖Jar包(比如Castor、Spring Web相关依赖),本地开发时依赖库齐全,但打包时可能漏包
  • 查看Tomcat日志文件(logs/catalina.out),里面会有更详细的错误栈,能定位具体的参数解析或类加载问题

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

相关产品推荐
方舟 Agent Plan

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

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