SpringMVC异常报406 (Not Acceptable)的解决办法

本文介绍了一个常见的SpringMVC应用中出现的406 Not Acceptable错误及其解决方法。该错误通常发生在尝试返回JSON格式数据而未正确配置相关依赖库的情况下。文章详细解释了错误产生的原因,并提供了具体的解决方案,即引入Jackson库的相关jar包。
使用SpsringMVC,使用restEasy调试,controller请求设置如下: 
Java代码   收藏代码
  1. @RequestMapping(value="/list",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON_VALUE)  
  2. @ResponseBody  
  3. public List<EditTimeout> list(){  
  4.      List<EditTimeout> list = editImpl.selectAll();  
  5.     return list;  
  6. }  


请求,debug跟踪list是返回值没有问题,但是前台页面报如下错误: 
Java代码   收藏代码
  1. Response Status: 406 (Not Acceptable)  


Response RAW返回值如下,(前半部分) 
Xml代码   收藏代码
  1. HTTP GET http://127.0.0.1:8080/onlineLibrary/rest/system/editTimeout/list  
  2. Host: 127.0.0.1:8080  
  3.   
  4.   
  5. 406 Not Acceptable  
  6. Date: Sat, 17 Aug 2013 11:01:07 GMT  
  7. Server: Apache-Coyote/1.1  
  8. Content-Length: 1067  
  9. Content-Type: text/html;charset=utf-8  
  10. <html><head><title>Apache Tomcat/7.0.34 - Error report</title><style>  


后台提示错误: 
Java代码   收藏代码
  1. 2013-08-17 19:01:03,116 DEBUG org.springframework.web.servlet.DispatcherServlet -Last-Modified value for [/onlineLibrary/rest/system/editTimeout/list] is: -1  
  2. 2013-08-17 19:01:07,606 DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver -Resolving exception from handler [public java.util.List<com.online.ol.filter.EditTimeout> com.online.ol.filter.EditTimeoutContoller.list()]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation  
  3. 2013-08-17 19:01:07,680 DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver -Resolving exception from handler [public java.util.List<com.online.ol.filter.EditTimeout> com.online.ol.filter.EditTimeoutContoller.list()]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation  
  4. 2013-08-17 19:01:07,681 DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver -Resolving exception from handler [public java.util.List<com.online.ol.filter.EditTimeout> com.online.ol.filter.EditTimeoutContoller.list()]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation  
自己在整合spingmvc的过程中,同样也是遇到了406的问题,前台ajax总是不能继续往下面执行,经过前台的检查元素,查看得知,状态码为406
如果当时没有在网上,查询结果,估计这个问题要困扰好久的。
在这里分享出来,虽然也是转载的,但是希望能够帮到更多的人解决这样的问题。
当时没有截图我自己的代码和错误提示,遇到这样问题的亲们,可以自行导包之后测试,我当时的错误就是没有导包造成的
如果亲们有其他的解决方法或者意见,请在下面留言,希望能帮到更多的人。

引起的原因: 
   由于设置了@ResponseBody,要把对象转换成json格式,缺少转换依赖的jar包,故此错。 
解决办法: 
   加入依赖的jar,jackson-core-asl-1.9.12.jar,jackson-mapper-asl-1.9.12.jar问题解决。
<think>好的,用户想了解HTTP状态码406的含义及解决方法。首先我需要回忆一下相关知识,并查看提供的引用资料。根据引用1和引用2,406表示客户端无法解析服务器返回的内容,通常是因为内容类型不匹配。引用3提到Spring框架中的异常,可能与媒体类型有关。引用4指出SpringMVC中请求以html结尾时不会返回JSON,这可能导致406错误。 接下来要组织回答,先解释406状态码的定义,再分析常见原因,比如Accept头与Content-Type不匹配,服务器不支持客户端请求的格式,或者SpringMVC配置问题。然后给出解决方案,比如检查请求头、配置服务器支持的类型、调整SpringMVC设置等。需要注意引用对应的资料来支持每个点,比如引用4提到的.html请求问题。 用户可能遇到的具体场景可能是使用SpringMVC时返回JSON却被要求HTML格式,这时候需要检查produces配置或添加消息转换器。另外,确保示例代码正确,比如设置正确的Accept头。还要提醒用户检查服务器日志,如引用3中的异常信息,帮助定位问题。 最后生成相关问题,覆盖相关状态码、调试方法、与其他错误的区别以及Spring中的具体处理。需要确保问题与用户查询相关,帮助进一步理解。</think>### HTTP状态码406 Not Acceptable解析 #### 定义与触发条件 HTTP状态码406表示**客户端请求的资源格式无法被服务器满足**,即客户端通过`Accept`头声明的可接受内容类型(如`application/json`,`text/html`)与服务器实际返回的`Content-Type`不匹配[^2][^3]。 #### 常见原因分析 1. **客户端请求头缺失/错误** 示例:客户端未携带`Accept: application/json`却要求解析JSON响应,或请求`.html`结尾的URL但期望JSON响应[^4]。 2. **服务器配置限制** ```java // SpringMVC示例:请求路径以.html结尾时强制返回HTML类型 @RequestMapping(value="/data.html", produces="application/json") public String getData() { /*...*/ } ``` 此时即使方法声明`produces`,仍会因路径后缀触发类型冲突[^4]。 3. **缺少消息转换器** Spring框架未配置`Jackson`等JSON处理器时,无法将Java对象转换为客户端需要的格式[^3]。 #### 解决方案(附代码示例) 1. **客户端修正请求头** ```http GET /api/data HTTP/1.1 Accept: application/json # 明确声明可接受类型 ``` 2. **服务器配置调整** ```xml <!-- Spring MVC配置支持JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 3. **强制指定响应类型** ```java @RequestMapping(value="/data", produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody DataObject getData() { /*...*/ } ``` 4. **禁用路径后缀影响** ```java // Spring Boot配置 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } } ``` #### 调试建议 1. 使用`curl -v`查看完整请求/响应头 2. 检查服务器日志中的`HttpMediaTypeNotAcceptableException` 3. 通过Postman验证不同`Accept`头的响应差异
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值