json - Angular:HttpErrorResponse :"Http failure during parsing for..."- 从服务器成功返回的字符串

标签 json string angular parsing string-parsing

Spring-boot RESTful 服务器端; 一个将返回字符串的测试方法:

@RequestMapping(value = "test", method = RequestMethod.GET)
    public ResponseEntity<String> test(HttpServletRequest req, HttpServletResponse resp) {
        try {
            return new ResponseEntity<String>("Test has worked, biatch!", HttpStatus.OK);
        } catch (Exception e) {
            System.err.println("## EXCEPTION: " + e.getMessage());
            return new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
        }
    }

来自 Postman - 一切正常,我从 JSON 中正确解析返回的字符串。

但是,当从我的 Angular 客户端尝试相同的操作时,我不断生成一个 HttpErrorResponse 对象。

  public url: string = "http://localhost:8080/theater/admin/test";
  constructor(private as: AdminService, private http: HttpClient) { }

  ngOnInit() {
  }

  getTest() {
    this.as.getTest()
      .subscribe(data => console.log(data), // this should happen on success
        error => console.log(error));  // this should happen on error
  }

有趣的是,它包含从服务器返回的字符串,我可以在订阅函数上使用 error.text 访问它。 控制台上的错误对象:

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:8080/theater/admin/test", ok: false, …}
error
:
{error: SyntaxError: Unexpected token T in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttp…, text: "Test has worked, biatch!"}
headers
:
HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message
:
"Http failure during parsing for http://localhost:8080/theater/admin/test"
name
:
"HttpErrorResponse"
ok
:
false
status
:
200
statusText
:
"OK"
url
:
"http://localhost:8080/theater/admin/test"
__proto__
:
HttpResponseBase

这可能与解析从服务器返回的包含字符串的 JSON 对象有关。 但是,返回对象、集合和其他任何东西 - 工作得很好 - .subscribe() 正确解析我从服务器获得的任何对象,或者如果服务器发生异常,返回的 HttpStatus 会在客户端正确调用 HttpErrorResponse。

那么,Strings 这样的错误触发是怎么回事?无论如何,我总是收到 HttpErrorResponse。我在这里做错了什么吗?

最佳答案

Test has worked, biatch!

这不是 JSON。从而解析错误。

This probably has to do with parsing the JSON object returning from the server, containing the String. however, returning objects, collections and whatever else- works totally fine- .subscribe()

它适用于 POJO,因为它们是 JSON 编码的。这里有普通的 String

要以字符串而不是对象的形式获取响应,请执行以下操作

 http.get(url, {responseType: 'text'})

关于json - Angular:HttpErrorResponse :"Http failure during parsing for..."- 从服务器成功返回的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52302792/

相关文章:

javascript - 如何验证 JSON 字符串 JQuery

c# - 查找字符串中的所有大写字母 - 正则表达式 C#

java - 为什么可变字符串会导致安全问题?

javascript - Angular Firebase 错误 ---- 使用无效数据调用函数 DocumentReference.set()。不支持的字段值 : undefined (found in field lastname)

angular - 如何在 Angular 4.0 中隐藏和显示

php - 如何根据应该显示的日期和时间显示 json 接收的字符串元素?

c# - ServiceStack JsonSerializer 不序列化公共(public)成员

arrays - 如何使用 JSON 发送带有数组的字典?

java - 类 TextBook 中的构造函数 TextBook 无法应用于给定类型

Angular 自动完成对象