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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Rest 和 Spring 安全性通过 ldap 登录 Angular?
Angular 2 Reactive Forms 问题如何以角度方式而不是 jquery 方式进行