【问题标题】:Spring + Angular: How to parse ResponseEntity in angular?Spring + Angular:如何以角度解析 ResponseEntity?
【发布时间】:2018-01-22 01:44:12
【问题描述】:

我正在使用 Spring Boot 创建一个需要在 Angular 4 中使用的 API。Spring 和 Angular 位于不同的端口上。

问题在于 Spring 的 ResponseEntity 在 Angular 中引发了错误。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public ResponseEntity getFlow(@PathVariable int id) {
        Flow flow = flowService.findById(id);

        return new ResponseEntity(flow, HttpStatus.FOUND);
    }

现在,我可以完美地使用 Postman 来测试 API 并且它可以工作了。

但是当我从 Angular 发出请求时,它返回一个错误:

奇怪的是,它会在请求的对象旁边返回一个错误。

现在,问题的原因是 Spring Boot 应用程序返回一个 ResponseEntity 而不是一个普通对象(如 String),而 Angular 不知道如何解释它。如果控制器只返回一个 Flow 对象,它就可以工作。

如何使用 ResponseEntity 解决?或者,我还能如何将对象与 HTTP 状态代码一起发送?

【问题讨论】:

  • 使用 HttpStatus.Found 有什么具体原因吗?这是一个成功的响应尝试发送 HttpStatus.Ok

标签: spring angular spring-mvc spring-boot


【解决方案1】:

另外,在@RequestMapping putproduce = "application/json",并在 Angular 中获取请求中,添加 http 选项:

const httpOptions = {
    headers: new HttpHeaders({
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    })
};

所以您的 get 请求如下所示:

this.http.get(url, httpOptions)

【讨论】:

    【解决方案2】:

    根据这里提到的文件

    https://docs.angularjs.org/api/ng/service/$http

    200 到 299 之间的响应状态代码被视为成功状态,将导致调用成功回调。超出该范围的任何响应状态代码都被视为错误状态,并将导致调用错误回调。此外,小于 -1 的状态代码被归一化为零。 -1 通常意味着请求被中止,例如使用 config.timeout。请注意,如果响应是重定向,XMLHttpRequest 将透明地跟随它,这意味着结果(成功或错误)将由最终响应状态码决定。

    当您发送 ResponseEntity(HttpStatus.Found) 的实例时,其 Http 状态代码为 302,不属于成功范围,这就是调用错误回调的原因。

    【讨论】:

    • 我使用了 HttpStatus.OK,它是 200。我仍然对同样的问题感到震惊。
    猜你喜欢
    • 2019-11-19
    • 2020-02-17
    • 2021-04-02
    • 1970-01-01
    • 2016-01-05
    • 2014-10-11
    • 2018-06-11
    • 2020-05-23
    • 2016-07-27
    相关资源
    最近更新 更多