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序列化工作所需的一切。
- 确保您返回的POJO有get()ers,每个字段一个。
- 即使您确定构建系统(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
我希望它会帮助某人。