406不可接受:Spring 3.2 + JSON + AJAX

3

我搜索了很多网站,甚至在stackoverflow上也没有找到解决这个问题的方法。看起来很多人都遇到了这个问题,但似乎缺少一个涵盖所有方面的统一解决方案。已经花了1.5天的时间。

我看到该方法被调用了,但某处的@ResponseBody没有被正确翻译。有人可以帮忙看看问题出在哪里吗?我已经将代码上传到github上。Github源代码链接

@RequestMapping(value = "/find_user", method = RequestMethod.GET)
public @ResponseBody List<String> findUser(@RequestParam("term") String name) {
    log.info("Search string for user name: " + name);   
    List<String> users = new ArrayList<String>();
    users.add("Sam");
    users.add("Dan");
    return users;
}

下面是带有 406 响应的浏览器截图。

enter image description here

请注意:啊!好痛苦。这个设置适用于Spring 3.1.4,而不是3.2.X。

由于个人原因无法检出您的代码,但是有一件事情我想问,为什么您添加了Jackson jar包?似乎Spring已经可以满足您的需求了。 - OQJF
@OQJF 你说得对。没有必要添加这些jar包[jackson-mapper-asl-1.9.2和jackson-core-asl-1.9.12],但是没有这些jar包的效果仍然相同。仍然会出现“406”错误。 - java_dude
@user2003821 你返回的是List还是String?看起来返回String时状态码为200,返回List则状态码为406。能告诉我一下吗? - java_dude
好的,我测试过了,这个设置可以在3.1.4上工作,但不能在3.2.X上工作,请降级。我没有耐心去制作和测试让它在3.2.x上工作,这是纯粹浪费时间。 - java_dude
这里有同样的问题,请建议我,我正在使用Spring 4.0.2。 - user4022749
显示剩余5条评论
2个回答

5

天啊,这几乎要把我折磨死了。我尽了一切努力,还是卡在那里。但最终我搞明白了。原因是Spring,下载Spring 3.1.1并将所有的jar替换为3.1.1jar,然后它就可以工作了。你的所有配置都没有问题。


但是Spring 3.2版本有什么问题吗?[链接] (http://blog.springsource.org/2012/12/13/spring-framework-3-2-goes-ga/) - java_dude
看看这个链接:http://blog.springsource.org/2012/12/13/spring-framework-3-2-goes-ga/ 他们说要升级。啊!我会降级的。谢谢。很快就会尝试。 - java_dude
很简单。令人奇怪的是,即使在3.2.3.RELEASE中,这个问题仍未得到解决:S - Yohanes Gultom
呃... 花了将近半天的时间才把这个问题解决。 - Mushtaq Jameel
请问您能告诉我如何在3.2.5版本中解决这个问题吗?我也遇到了同样的问题。请帮忙解决一下。现在我不想改变我的Spring版本。 - Milople Inc
显示剩余4条评论

2
我也遇到了同样的问题。在调试Spring后,我发现ServletPathExtensionContentNegotiationStrategy试图根据URL中的扩展名确定媒体类型。(很可能是因为它无法从我的情况下包含*/*Accept头中推断出应返回什么媒体类型。)
因此,解决这个问题的一种方法是通过将映射中的.html替换为.json来重新命名URL。

正确答案和有用的事实!! - hina10531

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接