【问题标题】:406 Not Acceptable: Spring 3.2 + JSON + AJAX406 不可接受:Spring 3.2 + JSON + AJAX
【发布时间】:2013-03-18 08:38:53
【问题描述】:

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

我看到该方法正在被调用,但某处 @ResponseBody 没有得到正确翻译。有人可以看看,让我知道问题是什么。我已经在github上上传了代码。 Link to source code on 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 响应

请注意:啊!多么痛苦。此设置适用于 Spring 3.1.4 而不适用于 3.2.X

【问题讨论】:

  • 出于个人原因无法查看您的代码,但有一个原因,您为什么要添加 jackson jar?看来spring可以满足你的要求了。
  • @OQJF 你是对的。无需添加这些罐子 [jackson-mapper-asl-1.9.2 and jackson-core-asl-1.9.12] 但没有这些罐子的效果仍然相同。仍然得到406 错误。
  • 我回家后会检查你的代码并检查原因,反正我认为这只是一个小错误。
  • @OQJF 谢谢。真的很感激。
  • 它是如何工作的,我应该降级,它真正的痛苦,有人帮助,同样的问题,我添加了 jackson mapper 和 jackson core,但仍然是同样的问题,是弹簧问题吗?你确定吗?请回复

标签: ajax json jquery spring-mvc


【解决方案1】:

我也遇到了同样的问题。在调试 Spring 之后,我发现 ServletPathExtensionContentNegotiationStrategy 尝试根据 URL 中的扩展名来确定媒体类型。 (可能是因为它无法推断它应该从包含 */*Accept 标头返回什么媒体类型。)

因此,解决此问题的方法之一是通过将 .html 替换为 .json 来重命名映射中的 URL。

【讨论】:

  • 用一个有用的事实正确回答!!
【解决方案2】:

天哪,它几乎要了我的命。我尽我所能,仍然卡在那里。但最后我想通了。原因是Spring,下载Spring 3.1.1,将所有jar替换为3.1.1jar,就可以了。你所有的配置都很好。

【讨论】:

猜你喜欢
  • 2014-11-18
  • 2013-04-26
  • 2011-11-19
  • 2015-03-17
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多