我有一个使用Spring 3.2.2的应用程序。我在Tomcat上运行它。
在应用程序中,我有一个返回JSON的控制器。
如果控制器请求映射包含字符串“.com
”,“.org
”,“.talk
”,则会收到HTTP错误406
此请求标识的资源只能生成 根据请求具有不可接受的特征的回复 “接受”标题。
示例:
这很好用:
@RequestMapping(method = RequestMethod.GET, value = "/test.test")
public @ResponseBody Map<String, String> test() {
Map<String, String> stringMap = new HashMap<String, String>();
stringMap.put("test", "test");
return stringMap;
}
这会导致http错误406:
@RequestMapping(method = RequestMethod.GET, value = "/test.talk")
public @ResponseBody Map<String, String> test() {
Map<String, String> stringMap = new HashMap<String, String>();
stringMap.put("test", "test");
return stringMap;
}
我试过的所有域名都没有重现这个问题。例如,“.net
”工作正常。
答案 0 :(得分:4)
我遇到了与上述相同的问题。我的应用程序在Jetty中工作但在Tomcat中没有。但是,在我的情况下,调用从未到达Spring控制器。
所以,如果你也是这种情况,这可能是一个Tomcat配置问题。 Tomcat在文件 web.xml 中有mime-mappings。删除不需要的 com , org 等的映射,406应该消失。
从 apache-tomcat-7.x / conf / web.xml 文件中删除以下内容:
<mime-mapping>
<extension>org</extension>
<mime-type>application/vnd.lotus-organizer</mime-type>
</mime-mapping>
<mime-mapping>
<extension>com</extension>
<mime-type>application/x-msdownload</mime-type>
</mime-mapping>.