Spring + Angular:如何以角度解析 ResponseEntity?

Posted

技术标签:

【中文标题】Spring + Angular:如何以角度解析 ResponseEntity?【英文标题】:Spring + Angular: How to parse ResponseEntity in angular? 【发布时间】: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 【参考方案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。我仍然对同样的问题感到震惊。

以上是关于Spring + Angular:如何以角度解析 ResponseEntity?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular.js 中解析 Int

如何使用 Rest 和 Spring 安全性通过 ldap 登录 Angular?

Angular 2 Reactive Forms 问题如何以角度方式而不是 jquery 方式进行

Angular 2将JSON对象解析为角度类[重复]

使用spring boot时如何通过在浏览器中点击URL来加载角度组件?

在 Angular + Spring Security 应用程序中找不到错误