Spring的Json没有得到适当的回应

我试图让Spring中的控制器返回一个JSON响应无法使用3.0推荐的Jackson类。 我当然在我的class级路径中获得了jackson jar文件(jackson-core-asl-1.5.5.jar和jackson-mapper-asl-1.5.5.jar)。

至于appconfig.xml条目,我不确定我是否需要这些。 我把它们放在那里作为绝望的最后一幕,然后回到了’时尚非json ajax’。

在调试中,我看到控制器获取请求,返回foo,然后在firebug中获得406。

错误消息如下:从记录器设置为debug时:org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示

从响应:(406)该请求标识的资源仅能够根据请求“accept”headers()生成具有不可接受特性的响应。

我的appconfig.xml在这里:

                            

我的控制器

 @RequestMapping(value="foo/bar", method=RequestMethod.GET) public @ResponseBody foo getFoo(@RequestParam String fooId) { return new foo(fooId); } 

在jsp上,进行ajax调用:

 function addRow() { $.getJSON("foo/bar",{ fooId: 1} , function(data) { alert("it worked."); }); 

}

如果还有其他需要的信息,请告诉我。

摆脱所有jackson豆,以及谈判解决方案中的json映射。 mvc:annotation-driven应该配置Jackson序列化工作所需的一切。

  1. 确保您返回的POJO有get()ers,每个字段一个。
  2. 即使您确定构建系统(Eclipse / Maven),也确保appserver(Tomcat)具有库。

我现在有两次这个错误。 刚才我把吸气剂添加到我的pojo中。 406错误消失了,我按预期获得了JSON。 我认为因为我的字段是受包保护的(默认访问),它会抓住它们,但我猜不是。 为了记录,如果它很重要,我还制作了POJO实现Serializable,toString(),serialVersionUID,no-arg构造函数和显式构造函数。

之前的时间我清理/清除/刷新了我的Tomcat缓存并做了其他任何强制重新加载的事情。 我相信当我添加Jackson依赖项时,它修复了我的编译时错误,但由于tomcat错过了它们,在运行时Spring MVC没有发现Jackson库,并产生了关于不可接受的响应类型的406错误。

另外,请确保添加两个与jackson相关的jar文件。

  • jackson-core-asl-1.9.8.jar
  • jackson-mapper-asl-1.9.8.jar

版本可能不同。

我知道这是一个老线程,但也许有人会遇到和我一样的问题。 将应用程序从Spring 4.0.3.RELEASE迁移到Spring 4.1.0.RELEASE时出现exception。 在我的情况下,jackson从1.9.x更新到2.4.x就可以了。

发送Accept:application / xml标头不起作用。 但是发送Accept:application / json实际上是有效的,jackson映射器开始运行。我摆脱了我的406并获得了json格式的序列化java对象,没有比@ResponseBody更多的配置并返回新的MyObject():)感谢skaffman为此信息,并感谢Bozho的工作标题值:D

这个问题在网上随处可见,我被它咬了几次。 Spring 3.0.6(可能还有5个)在渲染json时遇到了一些问题。 一旦我改为3.1.0.RELEASE版本eveyrything按原样工作。 没有任何配置更改。 需要注意的是,return方法必须具有@ResponseBody(如前面的示例所示),并且必须位于servlet-context.xml或spring上下文配置文件中。

从spring 3.x迁移到spring 4.x时,我遇到了同样的exception。

我通过更新jackson依赖项来解决它

   org.codehaus.jackson jackson-mapper-asl 1.9.13  

   com.fasterxml.jackson.core jackson-core 2.5.1   com.fasterxml.jackson.core jackson-databind 2.5.1   com.fasterxml.jackson.core jackson-annotations 2.5.1  

我不需要任何其他东西。

可能是我的答案有点晚,但它可能有助于其他人访问这个问题。

我通过添加解决了我的问题

  hibernate-validator-4.0.2 

并给了我另一个exception(类未找到exception:org.slf4j.LoggerFactory)我通过添加解决

 slf4j-api-1.5.6.jar 

我希望它会帮助某人。