1

我正在使用 AngularJS 1.4 和 Spring 4 RestController。当我在我的开发机器上发出 GET 请求时,一切正常。但是,当我将完全相同的 war 文件部署到我们的测试服务器时,来自完全相同的浏览器的完全相同的请求返回 HTTP 406 Not Acceptable。

两个环境之间的唯一区别在于我的开发机器上我使用的是嵌入式 Tomcat 8,而测试服务器上的应用程序部署在 Tomcat 7 上。

我的请求由一个包含电子邮件地址的路径变量组成。

本地请求: 在此处输入图像描述

测试服务器请求: 在此处输入图像描述

发出请求的angularjs代码:

utilService.emailD = function(email) {
        return $http({
            method : 'GET',
            url : 'util/emailD/' + encodeURIComponent(email)
        }).then(
            function successCallback(response) {
                return response.data;
            },
            function errorCallback(response) {
                return {
                    error : true
                };
            });
    }

接受请求的弹簧控制器

@RequestMapping(value = "/emailD/{email:.+}",
        method = RequestMethod.GET,
        produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> emailD(@Email @Valid @PathVariable(value = "email") String email) {       
    try {
        log.debug("request emailD, email: {}", email);

        //omitted irrelevant code

        return new ResponseEntity<String>(someString, HttpStatus.OK);
    } catch (IllegalArgumentException iae) {
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
}

您能想到有什么理由可能导致这种行为吗?

4

1 回答 1

1

此处描述了问题本身(以及多个可行的解决方案):

spring-json-request-getting-406-not-acceptable

在您的情况下,情况可能是您的本地 Tomcat 在类路径上确实具有所需的库,而远程 Tomcat 没有。由于您的应用程序需要这些,最好的解决方案是通过 Maven 声明为依赖项。另一种选择是将杰克逊库添加到您的Tomcatlib文件夹中。

于 2015-12-17T20:58:09.190 回答