春季 JSON 请求获取 406(不可接受)

2022-08-31 11:47:55

这是我的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;
}

弹簧服务.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错误,但休眠查询同时工作。这是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=?

问题可能出在哪里?之前在SO中有两个类似的问题,我在那里尝试了所有被接受的提示,但我想它们不起作用......

有什么建议吗?随时提问...


答案 1

406 不可接受

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

因此,您的请求接受标头是 application/json,并且您的控制器无法返回该标头。当找不到正确的 HTTPMessageConverter 来满足带批注的返回值@ResponseBody时,会发生这种情况。HTTPMessageConverter 会在您使用 时自动注册,给定类路径中的某些 3-d 方库。<mvc:annotation-driven>

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

我成功地复制了你的方案,它使用这两个库和没有指令工作正常。headers="Accept=*/*"

  • 杰克逊-核心-asl-1.7.4.jar
  • 杰克逊-映射器-asl-1.7.4.jar

答案 2

我遇到了同样的问题,从最新春季4.1.1开始,您需要将以下jar添加到pom.xml。

<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>

还要确保你有以下罐子:

<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>

406 Spring MVC Json,根据请求“接受”标头不可接受