1

我有一个使用 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”工作正常。

4

1 回答 1

4

我遇到了与上述相同的问题。我的应用程序在 Jetty 中工作,但在 Tomcat 中没有。但是,在我的情况下,调用从未到达 Spring 控制器。

因此,如果您也是这种情况,这可能是 Tomcat 配置问题。Tomcat 在web.xml文件中有 mime 映射。删除comorg等不需要的映射,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>.
于 2013-12-13T15:23:07.320 回答