gpt4 book ai didi

angular - 如何修复语法错误 : Unexpected token b in JSON at position 0

转载 作者:行者123 更新时间:2023-12-05 03:01:22 24 4
gpt4 key购买 nike

我想使用 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 Controller 的代码:

@GetMapping(value = "/findEmail", params = { "username" })
public String findEmail(@RequestParam String username) {
return utilisateursService.findEmail(username);
}

最佳答案

您没有 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,Jackson 会将响应转换为有效的 JSON 字符串。可以在 this answer 中看到执行此操作的解决方案。 .

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

关于angular - 如何修复语法错误 : Unexpected token b in JSON at position 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com