SpringJSON请求获得406(不可接受)错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

这是我的javascript:

    function getWeather() {
        $.getJSON('getTemperature/' + $('.data option:selected').val(), null, function(data) {
            alert('Success');                               
        });
    }

这是我的控制器:

@RequestMapping(value="/getTemperature/{id}", headers="Accept=*/*", method = RequestMethod.GET)
@ResponseBody
public Weather getTemparature(@PathVariable("id") Integer id){
    Weather weather = weatherService.getCurrentWeather(id);
        return weather;
}

Springservlet.xml

<context:annotation-config />
<tx:annotation-driven />

获取此错误:

GET http://localhost:8080/web/getTemperature/2 406 (Not Acceptable)

标题:

响应头

Server  Apache-Coyote/1.1
Content-Type    text/html;charset=utf-8
Content-Length  1070
Date    Sun, 18 Sep 2011 17:00:35 GMT

请求标头

Host    localhost:8080
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
X-Requested-With    XMLHttpRequest
Referer http://localhost:8080/web/weather
Cookie  JSESSIONID=7D27FAC18050ED84B58DAFB0A51CB7E4

有趣的注意事项:

我得到406错误,但Hibernate查询同时工作。这是Tomcat日志中的意思,每次我在Dropbox中更改选择时:

 select weather0_.ID as ID0_0_, weather0_.CITY_ID as CITY2_0_0_, weather0_.DATE as DATE0_0_, weather0_.TEMP as TEMP0_0_ from WEATHER weather0_ where weather0_.ID=?

提问于
用户回答回答于

406不可接受由请求标识的资源仅能够生成响应实体,这些响应实体具有根据在请求中发送的接受标头而不可接受的内容特征。

因此,您的请求接受标头是application/json,而您的控制器无法返回该消息。当找不到正确的HTTPMessage转换器以满足@ResponseBody注释的返回值时,就会发生这种情况。

如果您的类路径中没有正确的Jackson库,或者您没有使用<mvc:annotation-driven>指令。

我成功地复制了您的场景,并且使用这两个库和no。headers="Accept=*/*"指令。

  • jackson-core-asl-1.7.4.jar
  • jackson-mapper-asl-1.7.4.jar
用户回答回答于

需要将下面的JAR添加到头文件中。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.1.1</version>
</dependency>

还要确保有以下JAR:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

扫码关注云+社区