如何修复SyntaxError:位于0的JSON中的意外标记b

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

我想使用Spring MVC从我的后端读取一个电子邮件地址作为字符串。但是,当我尝试使用Angular的HttpClient读取它时,我收到以下错误:

SyntaxError: Unexpected token b in JSON at position 0 at JSON.parse

这是控制台中显示的错误的屏幕截图:

Screenshot of console

这是我在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);
}
angular spring-boot spring-mvc angular-httpclient
2个回答
1
投票

您没有JSON响应,您的响应是纯文本(电子邮件地址),可以通过第一个屏幕截图中的错误看到。

当你返回一个字符串时,Spring默认使用StringHttpMessageConverter,这意味着它只返回字符串并使用text/plain,例如[email protected]

这意味着响应将不是有效的JSON。要将其转换为有效的JSON,您需要有其他引号,例如"[email protected]"

解决方案是:

  1. 从您的后端返回JSON响应。这可以通过将响应(电子邮件)包装在类中来完成。一旦您返回对象,Jackson就会将它们序列化为JSON。例如: @GetMapping public User getUser() { // Response will be { "email": "[email protected]" } return new User("[email protected]"); }
  2. 或者告诉qazxsw poi使用qazxsw poi选项将响应解释为纯文本。 HttpClient也提到了这一点: responseType
  3. 或者从现有转换器中删除the documentation。这将导致转换为杰克逊的回退,这将把响应转换为有效的JSON字符串。可以在this.httpClient.get<string>('http://example.org', {responseType: 'text'}); 中看到解决方案。
  4. 或者,您可以在响应中添加其他引号。例如,在Spring控制器中返回StringHttpMessageConverter

0
投票

可能是你没有得到正确的JSON Object.Check一个api响应并验证正确的JSON来自api

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