无法解析 REST 答案 - 如何使其正确处理
2022-11-09
357
从 Angular 前端向 Java 后端发送 REST POST 请求后,后端接收该请求并计算答案。但是,在前端,请求未显示在日志中,而是给出解析错误。
Angular 端点有一个 Rest-Call,即:
getUserID<NonSimpleObject>(nonSimpleObject: NonSimpleObject): Observable<string> {
return this.http.post<string>(this.API_URL + '/userId', nonSimpleObject);
}
它在 Java 端点中接收,即:
@POST
@Path("/userId")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String userId(NonSimpleObject nonSimpleObject) {
LOG.info("The searched UserId is: " + controller.getUserId(nonSimpleObject);
return controller.getUserId(nonSimpleObject);
}
在后端,日志显示请求已到达并且字符串计算正确。字符串是字母数字组合,没有特殊字符。在前端,chrome 日志没有显示请求的痕迹,但给出了错误
ERROR SyntaxError: Unexpected number in JSON at position 1
at JSON.parse (<anonymous>)
at JsonParser.parse (json-parser.service.ts:64:21)
at CustomJsonParserHttpInterceptor.parseJsonResponse (custom-json-parser-h…nterceptor.ts:47:50)
at custom-json-parser-h…nterceptor.ts:42:64
at map.js:7:37
at OperatorSubscriber._next (OperatorSubscriber.js:13:21)
at OperatorSubscriber.next (Subscriber.js:31:18)
at XMLHttpRequest.onLoad (http.mjs:1840:30)
at _ZoneDelegate.invokeTask (zone.js:406:31)
at Object.onInvokeTask (core.mjs:26341:33)
我希望在来自后端的 ok 响应中收到字符串。关于如何正确执行请求过程有什么线索吗?
2个回答
将字符串作为通用类型提供不足以让 Angular 将其视为字符串。Angular 仍会尝试解析 json 并在此处失败。请同时设置 responseType 选项。
return this.http.post(this.API_URL + '/userId', nonSimpleObject, { responseType: 'text' });
除此之外,您的服务并不完全正确。它生成一个字符串,但您说它生成一个 json。请同时更改生成的 MediaType:
@Produces(MediaType.TEXT_PLAIN)
MoxxiManagarm
2022-11-09
我需要另一种解决方案,因为非通用版本的端点给我带来了问题。如果其他人也在寻找替代解决方案:
getUserID<NonSimpleObject>(nonSimpleObject: NonSimpleObject): Observable<string> {
return this.http.post<string>(this.API_URL + '/userId', nonSimpleObject);
}
的响应将是一个没有“”的字符串,正如 MoxxiManagarm 所述,它将无法正确解析。但是,在后端要返回的字符串前后添加“”将使其在前端正确解析。
因此,Java 端点将是:
@POST
@Path("/userId")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String userId(NonSimpleObject nonSimpleObject) {
return '"' + controller.getUserId(nonSimpleObject) + '"';
}
Stef
2022-11-11