关于前端报错406的问题

报错:the server responded with a status of 406
现象:使用@ResponseBody标签自动转换数据为json数据响应给前端时,前端报406异常
原因:查看了很多资料,都像是不是没导包就是请求拦截的路径问题。但是最后发现是两个版本的webmvc包冲突的问题
解决方法:删除项目中的有冲突的包即可。(3.1.0与5.2.2删除了低版本3.1.0的包)

### ### HTTP 406 Not Acceptable 错误的解决方法 HTTP 406 Not Acceptable 错误通常出现在服务器无法根据客户端请求的内容类型(如 `Accept` 请求头)提供合适的数据格式时。在 Spring Boot 或 Spring MVC 应用中,该错误可能与内容协商策略、依赖配置以及返回值类型有关 [^1]。 #### 1. 检查客户端请求头中的 `Accept` 字段 客户端(如浏览器或前端应用)在请求接口时,应明确指定其期望接收的内容类型。例如,如果希望接口返回 JSON 格式,应在请求头中设置: ```http Accept: application/json ``` 如果未指定或指定了不支持的格式,服务器可能无法正确响应并返回 406 错误 [^2]。 #### 2. 配置默认内容类型以避免协商失败 Spring Boot 支持内容协商机制,根据客户端请求的 `Accept` 头或 URL 扩展名决定返回格式。为避免因客户端未指定 `Accept` 而导致 406 错误,可以通过配置强制默认内容类型为 JSON: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON_VALUE); } } ``` 该配置确保即使客户端未明确指定内容类型,接口也会默认返回 JSON 格式 [^3]。 #### 3. 确保项目中包含正确的 JSON 依赖 Spring Boot 默认使用 Jackson 序列化对象为 JSON。如果项目中缺少 `jackson-databind` 依赖,可能导致 JSON 序列化失败并引发 406 错误。请确保 `pom.xml` 中包含以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 同时,避免引入 `jackson-dataformat-xml` 依赖,否则可能干扰 JSON 格式的优先级 [^1]。 #### 4. 显式指定接口返回格式为 JSON 即使未使用 `@RequestBody` 或 `@ResponseBody` 注解,也可以通过 `@RequestMapping` 或 `@GetMapping` 的 `produces` 属性明确指定接口返回 JSON 格式: ```java @RestController @RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE) public class MyController { @GetMapping("/data") public MyData getData() { return new MyData("hello", 200); } } ``` 该配置确保接口始终返回 JSON,而不受客户端请求头或内容协商策略的影响 [^2]。 #### 5. 检查接口返回值是否可序列化 如果接口返回的对象没有定义默认构造函数或未提供 getter 方法,Jackson 可能无法正确序列化该对象,从而导致 406 错误。确保返回对象的字段可通过 getter 方法访问: ```java public class MyData { private String message; private int code; public MyData(String message, int code) { this.message = message; this.code = code; } public String getMessage() { return message; } public int getCode() { return code; } } ``` #### 6. 避免跨服务调用中的格式不匹配 在跨服务调用场景中,如果接口返回的不是 JSON 格式(如返回 XML 或纯文本),调用方尝试将其转换为 `JSONObject` 时会失败并抛出 406 错误。确保接口始终返回 JSON 格式,并在调用方验证响应内容类型: ```http Content-Type: application/json ``` #### 7. 日志分析与异常信息定位 当出现 406 错误时,查看 Spring Boot 的日志输出,定位是否抛出 `HttpMediaTypeNotAcceptableException` 异常。该异常通常表示服务器无法找到可接受的响应格式: ``` Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation] ``` 结合日志信息和请求头分析,有助于快速定位并解决问题 [^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值