2

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

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

我有杰克逊库到类路径,进入 applicationContext 但我仍然得到这个 jquery 调用的 406 错误:

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

5 回答 5

4

您必须添加罐子,还要添加org.springframework.http.converter.json.MappingJacksonHttpMessageConverterorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterDispatcherServlet-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"/>

如上图所示。

于 2013-10-18T05:42:24.560 回答
0

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

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

尝试替换dataType: "json"dataType: "application/json".

于 2012-07-03T10:11:42.013 回答
0

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

于 2012-07-03T10:26:13.740 回答
0

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

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

其他解决方案都不适合我

于 2012-07-18T15:08:41.463 回答
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 的类 :) - 我只是在做一个虚拟示例来检查杰克逊是否在我的新设置中工作

于 2014-07-10T16:24:37.020 回答