GET请求在本地工作,在测试服务器上返回HTTP 406

时间:2015-12-17 18:21:26

标签: angularjs spring tomcat get http-status-code-406

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

我的开发机器上只有两个环境之间存在差异,我使用嵌入式Tomcat 8,而测试服务器应用程序部署在Tomcat 7上。

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

本地请求 enter image description here

测试服务器请求 enter image description here

发出请求的

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
                };
            });
    }

接受请求的Spring控制器

@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);
    }
}

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

1 个答案:

答案 0 :(得分:1)

此处描述了问题本身(以及多种工作解决方案):

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

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