SpringBoot REST API发POST请求返回415 Unsupported Media Type错误如何解决
问题解决
报错核心原因
- 请求头参数缺少
-H标识:你写的"Content-Type: application/json"前面没有加-H参数前缀,curl会把这段内容识别为请求URL的一部分,导致端口解析错误,同时服务端没有收到正确的Content-Type请求头,因此返回415不支持媒体类型错误。 - Windows CMD的引号规则和Linux shell不同:CMD不支持单引号包裹字符串,同时JSON内部的双引号需要用反斜杠转义,否则CMD会把JSON内部的双引号识别为参数边界,把JSON内容拆成多个独立参数,就会出现"无法解析主机Magnus"这类报错。
正确的CMD下curl命令
curl -X POST -H "Content-Type: application/json" http://localhost:8080/players -d "{\"firstName\": \"Magnus\", \"lastName\": \"Carlsen\", \"email\": \"magnuscarlsen@gmail.com\"}"
额外注意:Controller代码存在隐藏问题
你的updatePlayer方法中有两处笔误,会导致更新功能异常:
- 连续调用了两次
setFirstName,lastName无法正确更新
// 错误写法 currentPlayer.setFirstName(player.getFirstName()); currentPlayer.setFirstName(player.getLastName()); // 修正为 currentPlayer.setFirstName(player.getFirstName()); currentPlayer.setLastName(player.getLastName());
- 保存时用了传入的
player对象而非修改后的currentPlayer,会导致修改不生效
// 错误写法 currentPlayer = playerRepository.save(player); // 修正为 currentPlayer = playerRepository.save(currentPlayer);
内容的提问来源于stack exchange,提问作者Tim Hudson
相关产品推荐
相关产品推荐

