JSON 错误中出现意外的令牌,但我使用的是“produces = “text/plain””?
Posted
技术标签:
【中文标题】JSON 错误中出现意外的令牌,但我使用的是“produces = “text/plain””?【英文标题】:Unexpected Token in JSON error but I'm using 'produces = "text/plain"'? 【发布时间】:2021-10-02 21:35:59 【问题描述】:当我在我的网络应用程序中调用以下函数时出现错误:
getUML()
const testName = this.formdata.get('testName');
this.disableDeployCTA = true;
const params:string = testName + "/txt";
const url = `http://localhost:8081/bruml/export/$params`
this.httpService.generateUML(params).subscribe((response: any) =>
this.umlText = response.data;
);
请求通过 Spring Boot 应用程序,使用此方法:
@GetMapping(value = "/export/testName/txt", produces = "text/plain")
public ResponseEntity<String> exportTxt(@PathVariable("testName") String name)
UMLClient myClient = new UMLClient();
String txtUML = "";
byte[] toExport = null;
try
String fileName = ".\\tempFiles\\" + name;
myClient.export(name, fileName + ".txt", true);
File txtTemp = new File(fileName + ".txt");
File file = new File(fileName + ".svg");
Path filePath = Paths.get(fileName + ".txt");
Charset charset = StandardCharsets.UTF_8;
txtUML = new String(Files.readAllBytes(filePath));
if(file.exists() && txtTemp.exists())
file.delete();
txtTemp.delete();
catch (Exception e)
e.printStackTrace();
return new ResponseEntity<>(txtUML, HttpStatus.OK);
generateUML方法如下:
generateUML(params)
return this.httpClient.get('http://localhost:8081/bruml/export/'+ params);
我收到“JSON 中出现意外标记 @”的错误。但我不希望它解析为 JSON —— 我将产品属性设置为纯文本。我该如何解决这个问题?
编辑**
我在控制台中收到此错误
以下是开发工具中我的网络选项卡中有关请求和响应的详细信息:
【问题讨论】:
请您发布您的 json 你从哪里得到这个错误信息,前端还是后端? @Bharat@startuml autonumber ==step 1: ABS.API== "someImport"->"Web API Step 1": API #1 rnote left "someImport" static data 1 endrnote activate "Web API Step 1" "someImport" <-- "Web API Step 1": [] deactivate "Web API Step 1" @enduml
虽然我想生成纯文本而不是 JSON
是的,那么后端正在正确地完成它的工作(仔细检查这一点,在邮递员中触发相同的事情并检查标题),前端似乎期待一个 JSON 对象,你可能不得不深入挖掘generateUML
方法
@Andreas,现在我们的 httpClient 对象有问题????
【参考方案1】:
@anoncomp 您可以从浏览器网络选项卡中发布请求和响应吗?如果您收到200
响应,那么我们可以看到您从后端获得的确切信息。如果您得到正确的响应,那么问题将出现在这一行:
this.umlText = response.data;
因为您期望响应是一个对象。
您可能需要解析响应。
编辑:你在使用 Angular 吗?如果是这样,您是否可以尝试在get
请求中发送选项,并将responseType
也作为text
发送?供参考:Angular Docs。默认情况下,Angular 将响应视为 JSON:
来自角度文档:
get() 调用需要以下选项:
observe: 'body', responseType: 'json'
。
这些是这些选项的默认值,因此以下示例不传递选项对象。
【讨论】:
已发布!我收到了 200 响应,我还输入了我能找到的关于标题、响应等的所有细节。有趣的是,响应标题是纯文本。你会如何建议替换this.umlText = response.data
?
只需使用 this.umlText = response;
得到了同样的错误:(我也试过response.data.toString和response.text()
@anon comp 你在使用角度吗?如果是,您是否可以尝试在获取请求中发送带有响应类型文本的选项。供参考:angular.io/guide/http#requesting-data-from-a-server 默认情况下,Angular 将响应视为 JSON:来自 Angular 文档:要获取此类数据,get() 调用需要以下选项:observe: 'body', responseType: 'json'。这些是这些选项的默认值,因此以下示例不传递选项对象。以上是关于JSON 错误中出现意外的令牌,但我使用的是“produces = “text/plain””?的主要内容,如果未能解决你的问题,请参考以下文章