【问题标题】:How To Fix SyntaxError: Unexpected token b in JSON at position 0如何修复 SyntaxError:位置 0 处 JSON 中的意外标记 b
【发布时间】:2019-09-15 20:54:40
【问题描述】:

我想使用 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 响应
  • 你能把结果的console.log()放到findEmail()函数调用吗?可能是您的 JSON 字符串不正确并且未正确序列化。
  • 你能把smaple JSON放上去吗
  • 通常人们至少内联图片而不是指向一些外部服务。但实际上,请在提问时阅读帮助。

标签: angular spring-boot spring-mvc angular-httpclient


【解决方案1】:

可能是您没有得到正确的 JSON 对象。请检查 api 响应并验证正确的 JSON 来自 api

【讨论】:

    【解决方案2】:

    您没有 JSON 响应,您的响应是纯文本(电子邮件地址),如第一个屏幕截图中的错误所示。

    当你返回一个字符串时,Spring 默认使用StringHttpMessageConverter,这意味着它会简单地返回字符串并使用text/plain,例如foo@example.com

    这意味着响应不是有效的 JSON。要将其转换为有效的 JSON,您需要有额外的引号,例如 "foo@example.com"

    解决办法是:

    1. 要么从后端返回 JSON 响应。这可以通过将响应(电子邮件)包装在一个类中来完成。一旦您返回对象,Jackson 就会将它们序列化为 JSON。例如:

      @GetMapping
      public User getUser() {
          // Response will be { "email": "foo@example.com" }
          return new User("foo@example.com");
      }
      
    2. 或者告诉HttpClient 使用responseType 选项将响应解释为纯文本。 the documentation也提到了这一点:

      this.httpClient.get<string>('http://example.org', {responseType: 'text'});
      
    3. 或从现有转换器中删除StringHttpMessageConverter。这将导致转换回退到 Jackson,这会将响应转换为有效的 JSON 字符串。可以在this answer 中看到解决方案。

    4. 或者,您可以在回复中添加额外的引号。例如,通过在 Spring 控制器中返回 "\"foo@example.com\""

    【讨论】:

    • 超级!!..谢谢。
    猜你喜欢
    • 2020-07-02
    • 2021-05-06
    • 1970-01-01
    • 2017-12-24
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    相关资源
    最近更新 更多