Spring JSON和406 HTTP错误

时间:2012-07-03 09:44:06

标签: jquery json spring jackson

我发现很多关于这个问题的问题,但我没有解决...... 我有这个方法:

@RequestMapping(value="/testInit")
public @ResponseBody Output test() throws Exception {
    return new Output(true);
}

我有jackson libreary到classpath,进入applicationContext但是我仍然在这个jquery调用中得到406错误:

$.ajax({
    url: "/testInit",
    type: "get",
    dataType: "json"
}); 

5 个答案:

答案 0 :(得分:4)

您必须添加jar并将org.springframework.http.converter.json.MappingJacksonHttpMessageConverterorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter添加到DispatcherServlet-servlet.xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jacksonMessageConverter"/>
        </list>
    </property>
</bean>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

如上所示。

答案 1 :(得分:0)

当客户端请求服务器无法返回的内容类型时,将使用406 Not Acceptable响应。换句话说,您的客户端(例如Web浏览器)正在发送与服务器功能不匹配的Accept标头。

我猜测jQuery Ajax方法在设置dataType标头时使用Accept字段。 json不是众所周知的内容类型 - 但application/json是。

尝试将dataType: "json"替换为dataType: "application/json"

答案 2 :(得分:0)

我解决了使用jackson-all.1.9.0.jar而不是jackson 2库。

答案 3 :(得分:0)

我能让我工作的唯一方法是将spring升级到3.1并在请求映射中添加一个产品。

@RequestMapping(value = "/rest/{myVar}", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public MyObject get(
        @PathVariable String myVar) {

其他解决方案都不适合我

答案 4 :(得分:0)

我遇到了这个问题,最后被追踪到我正在使用的课上没有任何吸气剂。

即。这造成了406

public static class Pojo {
    private int x;
    public Pojo(int x) {
        this.x = x;
    }
}

但这并没有

public static class Pojo {
    private int x;
    public Pojo(int x) {
        this.x = x;
    }
    public int getX() {
        return x;
    }
}

是的我正在使用一个名为Pojo的课程:) - 我只是在做一个虚拟的例子来检查杰克逊是否在我的新设置中工作