Мой контроллер 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 на веб-сайте, поэтому я подписываюсь на Observable из http-клиента, но оно не отображается на экране.
Вот мой компонент 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; });
}
}
Я действительно понятия не имею, как я могу это исправить.
Я получил сообщение об ошибке: SyntaxError: "JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON"
Но я понятия не имею, что могло пойти не так. Это простое текстовое сообщение
Смотрите ответ, который я разместил. Спасибо!





Ошибка возникает из-за того, что HttpClient предполагает, что содержимое является допустимым JSON, а не простой строкой. Он эффективно пытается проанализировать JSON внутри. Если вы попытаетесь сделать JSON.parse("hello Angular"), вы увидите точно такую же ошибку:
JSON.parse("hello Angular");Для получить содержимое не в формате JSON вы можете сделать следующее, указав тип ответа как text, а также удалив общий тип <string>:
this.http.get('http://localhost:8080/u/greet', {responseType: 'text'})
.subscribe(data => { this.greeting = data; });
В противном случае для любых фактических данных JSON (application/json), возвращаемых с сервера, вам не нужно предоставлять responseType и вы можете/должны использовать универсальный механизм ввода.
Надеюсь, это поможет!
Это было ключом к решению проблемы. Вы действительно помогли мне. Спасибо!
Большое тебе спасибо! Это помогло мне, и вы объяснили это очень хорошо.
Если вы добавите
console.info(data)внутрь телаsubscribe(), что будет записано? Кроме того, вы видите, как запрос выполняется на вкладке сети инструментов разработчика вашего браузера?