Spring Boot非根路由返回404 根路由访问报内容类型不支持问题
问题1:向"/families"路由发送GET请求返回404
根因
- 你当前
FamilyController类上的@RequestMapping注解仅配置了consumes、produces属性,未指定路由前缀,所以该Controller下接口的根路径默认是/,而非你预期的/families,请求路径无法匹配自然返回404。 - 补充确认:你的启动类在
com.example包下,Controller处于com.example.controller子包中,Spring Boot默认组件扫描规则可以正常识别该Controller,不存在组件未注册的问题。
解决方案
修改类上的@RequestMapping注解,添加path属性指定路由前缀:
@RestController @RequestMapping(path = "/families", consumes = "application/json", produces = "application/json") public class FamilyController { // 其余原有代码保持不变 }
修改后getFamily方法的路由就是GET /families,即可正常匹配请求。
问题2:路由改为"/"后返回
Content type '' not supported错误 根因
@RequestMapping的consumes属性作用是限定只有请求的Content-Type头符合指定值时,才会匹配该路由。你配置了consumes = "application/json",要求所有请求必须携带Content-Type: application/json头,但GET请求通常没有请求体,绝大多数客户端发送GET请求时默认不会携带Content-Type头,导致请求头中该字段为空,匹配失败返回错误。
解决方案
GET请求不需要消费请求体,无需配置consumes属性,推荐选择以下两种修改方式:
- 移除类上
@RequestMapping的consumes配置(最符合REST规范):
@RestController @RequestMapping(path = "/families", produces = "application/json") public class FamilyController { // 其余原有代码保持不变 }
- 如果你需要保留类全局的
consumes配置,可以单独在GET方法上覆盖该配置:
@GetMapping(path = "/", consumes = "*/*") public String getFamily(){ // 其余原有代码保持不变 }
如果是本地测试验证,也可以在发送GET请求时手动添加Content-Type: application/json请求头,即可正常请求。
内容的提问来源于stack exchange,提问作者tгue_cookie
相关产品推荐
相关产品推荐

