这个问题前后端都可能会出现,先说说前端。
前端:
检查发送请求时的请求头中的Accept,是不是:*/*或者application/json
如果不是,修改就行。
Accept这玩意代表了后端必须按照请求头这个要求来发送数据。
后端:
1.你后端发送的是不是json数据,比如说,一般来说,要看看你返回的数据有没有打上类似于@Data这种类型的注解,不然就要检查类型是不是json。
2.当然你也可以修改你的接口访问格式,不能返回的结果类型不处理,这样避免了406,但会让接口变得没办法使用。
3.你也可以指定你想要返回的类型数据,比如说只返回json就可以这样写
@PostMapping("/test")
@Consumes(MediaType.APPLICATION_JSON_VALUE)
@Produces(MediaType.APPLICATION_JSON_VALUE)
public Map<String, String> example() {
return Collections.singletonMap("key", "value");
}
具体来说,这个异常通常发生在以下情况:
-
客户端请求了特定的媒体类型:客户端在
Accept
头部中指定了一种或多种媒体类型,例如Accept: application/json
,表示客户端期望接收JSON格式的响应。 -
服务器无法提供请求的媒体类型:服务器端没有配置来产生客户端请求的媒体类型,或者控制器方法没有声明它们可以产生这种类型的响应。
-
内容协商失败:Spring的内容协商机制无法找到一个合适的
ContentNegotiationStrategy
来处理请求,可能是因为没有可用的HttpMessageConverter
能够处理请求的媒体类型。
这个异常的目的是告诉客户端,服务器无法产生一个符合其期望媒体类型的响应。这可能是因为:
- 服务器不支持生成任何客户端请求的媒体类型。
- 服务器配置错误,导致无法识别或处理特定的
Accept
头部。 - 控制器方法缺少必要的注解或配置,以指示它们可以产生客户端请求的媒体类型。