【问题标题】:Subscribing Observable from HTTP request从 HTTP 请求订阅 Observable
【发布时间】:2019-07-14 13:05:29
【问题描述】:

我的 Spring Boot 控制器发送字符串“hello Angular”作为对 http 请求的简单响应。

@Controller
@RequestMapping(path = "/u")
public class UController {
    @RequestMapping("/greet")
        public  @ResponseBody  String greet() {
            System.out.println("you are in the method greet() ");
            return "hello Angular";
    }
}

我在控制台 (System.out) 看到 Angular 请求了正确的方法,并且响应应该已经发送到客户端。

我想通过 Angular 在网站上打印这条消息,所以我从 http 客户端订阅了 Observable,但它没有出现在屏幕上。

这是我的 Angular 组件:

import { Component, OnInit } from '@angular/core';
import { HttpClientModule }    from '@angular/common/http';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Component({
  selector: 'app-root',
  template: `
    <div style="text-align:center">
      <h1> {{greeting}} </h1>
      </div>
    <router-outlet></router-outlet>
  `,
  styleUrls: ['./app.component.css']
})

export class AppComponent implements OnInit{

    greeting : string;

    constructor(private http: HttpClient){  }

    ngOnInit() {
        this.http.get<string>('http://localhost:8080/u/greet').subscribe(data => { this.greeting = data; });
    }
}

我真的不知道如何解决它。

【问题讨论】:

  • 如果在subscribe() 的正文中添加console.log(data),会记录什么?另外,您是否在浏览器的开发人员工具的网络选项卡中看到请求执行?
  • 我收到一个错误:SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data"
  • 但我不知道出了什么问题。这只是一条简单的短信
  • 查看我发布的答案。谢谢!

标签: angular spring spring-boot http


【解决方案1】:

发生错误是因为HttpClient 假定内容是有效的 JSON,而不是简单的字符串。它有效地尝试在内部解析 JSON。如果你尝试做JSON.parse("hello Angular"),它会显示完全相同的错误:

JSON.parse("hello Angular");

对于retrieve non-JSON content,您可以通过将响应类型指定为text 以及删除&lt;string&gt; 的通用类型来执行以下操作:

this.http.get('http://localhost:8080/u/greet', {responseType: 'text'})
  .subscribe(data => { this.greeting = data; });

否则,对于从服务器返回的任何实际 JSON (application/json) 数据,您无需提供 responseType 并且可以/应该使用通用类型机制。

希望对您有所帮助!

【讨论】:

  • 这是解决问题的关键。你真的帮助了我。谢谢!
  • 非常感谢!这对我有帮助,你解释得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2016-10-02
  • 2019-07-19
  • 1970-01-01
相关资源
最近更新 更多