2013-03-28 75 views
3

搜索了很多网站,甚至是stackoverflow,但还没有找到解决这个问题的方法。看起来很多人都遇到过这个问题,但它似乎是一个涵盖所有方面的统一解决方案。已经花了1.5天。406不可接受:Spring 3.2 + JSON + AJAX

我看到方法正在调用,但某处@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响应

enter image description here

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

+0

不能检查你的代码为个人原因,但1件事,为什么你添加杰克逊jar?看起来春天可以满足你的要求。 – OQJF 2013-03-28 02:28:12

+0

@OQJF你是对的。不需要添加这些罐子['jackson-mapper-asl-1.9.2和jackson-core-asl-1.9.12'],但没有这些罐子的效果仍然相同。仍然会发生'406'错误。 – 2013-03-28 03:33:47

+0

当我回家时,我会检查你的代码并检查原因,无论如何我认为这只是一个小错误。 – OQJF 2013-03-28 04:18:00

回答

5

上帝,它几乎杀死我。我竭尽全力,仍然坚持下去。但最后我明白了。原因是Spring,下载Spring 3.1.1并用3.1.1jars替换所有的jar,并且它工作正常。你所有的配置都很好。

+0

但是,什么是错误的春天3.2版本? [链接](http://blog.springsource.org/2012/12/13/spring-framework-3-2-goes-ga/) – 2013-03-28 07:04:05

+0

这是一个框架错误,我认为,不完全确定。 – OQJF 2013-03-28 07:06:34

+0

看看链接.. http://blog.springsource.org/2012/12/13/spring-framework-3-2-goes-ga/他们说升级。啊!!我会降级。谢谢。将很快尝试。 – 2013-03-28 07:07:37

2

我也面临同样的问题。在调试Spring后,我发现ServletPathExtensionContentNegotiationStrategy尝试根据URL中的扩展名来确定媒体类型。 (也许,因为它无法推断出介质类型,它应该从我的情况下,包含*/*Accept头返回。)

所以,解决这个问题的方法之一是通过.json更换.html在映射重命名URL。

+0

正确的答案与一个有用的事实! – hina10531 2015-03-26 02:44:44