【问题标题】:GET request works on local, returns HTTP 406 on test serverGET 请求在本地工作,在测试服务器上返回 HTTP 406
【发布时间】:2015-12-17 18:21:26
【问题描述】:

我正在使用 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
                };
            });
    }

接受请求的 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);
    }
}

你能想到什么原因可能会导致这种行为吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 在那个问题中,OP 说休眠查询执行,但在我的情况下,路径变量永远不会进入函数,函数内部没有任何内容被执行。还是去看看吧,谢谢。
    猜你喜欢
    • 2019-07-26
    • 2011-08-09
    • 2019-03-12
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多