2013-03-28 84 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