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
相关产品推荐
相关产品推荐

