我想使用Spring MVC从我的后端读取一个电子邮件地址作为字符串。但是,当我尝试使用Angular的HttpClient
读取它时,我收到以下错误:
SyntaxError: Unexpected token b in JSON at position 0 at JSON.parse
这是控制台中显示的错误的屏幕截图:
这是我在Angular中使用的代码来读取响应:
public findEmail(username: string): Observable<string> {
let params = new HttpParams();
params = params.append('username', username);
return this.httpClient.get<string>(this.baseUrl + '/findEmail', {params});
}
这是Spring控制器提供响应的代码:
@GetMapping(value = "/findEmail", params = { "username" })
public String findEmail(@RequestParam String username) {
return utilisateursService.findEmail(username);
}
您没有JSON响应,您的响应是纯文本(电子邮件地址),可以通过第一个屏幕截图中的错误看到。
当你返回一个字符串时,Spring默认使用StringHttpMessageConverter
,这意味着它只返回字符串并使用text/plain
,例如[email protected]
。
这意味着响应将不是有效的JSON。要将其转换为有效的JSON,您需要有其他引号,例如"[email protected]"
。
解决方案是:
@GetMapping
public User getUser() {
// Response will be { "email": "[email protected]" }
return new User("[email protected]");
}
HttpClient
也提到了这一点:
responseType
this.httpClient.get<string>('http://example.org', {responseType: 'text'});
中看到解决方案。StringHttpMessageConverter
。可能是你没有得到正确的JSON Object.Check一个api响应并验证正确的JSON来自api