从HTTP请求订阅Observable

问题描述 投票:0回答:1

我的Spring Boot控制器发送String“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; });
    }
}

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

angular spring spring-boot http
1个回答
1
投票

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

JSON.parse("hello Angular");

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

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

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

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.