gpt4 book ai didi

java - Angular 和 Java Jersey API 存在问题,末尾编码 utf-8 空格无效 json

转载 作者:行者123 更新时间:2023-12-01 19:33:37 25 4
gpt4 key购买 nike

我有一个问题,当我尝试以 Angular 方式进行http get时,抛出“解析期间的Http失败”,因为Json末尾有一些空格字符,我不明白为什么服务器返回这个。

有某种方法,从 Angular 可以在 http.get 执行 Json.parse 之前省略这些字符,或者有人知道为什么服务器可能会返回它们。我正在使用 Tomcat 8.5 运行。仅当响应具有“ñ”或“á,é,í,ó,ú”等特殊字符时,才会出现此空白字符

这里上传两张图片来说明答案如何有空格 https://ibb.co/Jtdy1Mp

https://ibb.co/W6QxGrc

这是一个java Rest服务的例子。

@Path("/plagas")
@Produces("application/json;charset=UTF-8")
@Consumes("application/json;charset=UTF-8")
public class PlagasController {
@GET
@Path("/{idTipoMonitoreo}")
public Response consultar(@HeaderParam("token") String token, @PathParam(value="idTipoMonitoreo") long idTipoMonitoreo ) throws Exception {
IntUsuarioGenericoManager usuarioGenericoManager = new ImpUsuarioGenericoManager();
IntTiposMonitoreoPlagasManager tipoMonitoreoPlagasManager = new ImpTiposMonitoreoPlagasManager();
Gson gson = new Gson();
try {
UsuarioGenericoDTO usuario = usuarioGenericoManager.usuarioPorToken(token);
TipoMonitoreoDTO tmDirecto = new TipoMonitoreoDTO();
tmDirecto.setIdTipoMonitoreo(idTipoMonitoreo);
List<TipoMonitoreoPlagasDTO> plagas = tipoMonitoreoPlagasManager.buscarTodoPorTipoMonitoreo(tmDirecto,usuario);
return Response.ok().entity(gson.toJson(plagas)).build();
}catch(ParseException e) {
return Response.status(Status.BAD_REQUEST).build();
}
catch (Exception e) {
return Response.serverError().build();
}
}

}

最佳答案

您说过 JSON 末尾的 NUL 字符数等于“特殊”字符的数量。

您的 Jersey 服务器和您的 Web 应用程序之间对于响应的编码方式和/或内容长度的含义存在一些分歧。

假设您的回复中有 10 个字符,其中 3 个是“特殊”。

  • 响应中的字符数为 10。
  • UTF-8 编码响应中的字节数为 13,因为 UTF-8 编码将 7 个字符编码为 1 个字节,将 3 个字符编码为每个 2 个字节 (7 + 2*3 = 13)。
  • 响应的内容长度为 13,因为它被定义为字节数。

(有人会指出UTF-8编码的响应长度不一定是13个字节,因为一些特殊字符可能被编码为3或4个字节。但我的目标不是进入UTF-8 编码的详细信息,而是让您注意字符字节之间的区别。)

一些可能性:

  • 客户端将内容长度解释为要读取的字符数,而不是字节数,因此它会读取超出响应末尾的 3 个字符并用 NUL 填充这些字符。
  • 服务器正在为 UTF-8 编码的响应(13 字节)分配空间并将内容长度设置为 13,但实际上是将响应编码为其他内容,例如 ISO-8559-1(“Latin-1 "),它会生成 10 字节的响应,并在缓冲区末尾留下 3 NUL 字节。

或者代码中可能有其他地方混淆了字节和字符。如果没有所有代码,很难确切地说出它发生在哪里。

您应该做的是隔离每个组件并查看其是否正常工作。例如,您可以使用curl 或Postman 之类的工具来测试您的服务器,并确保它确实发送UTF-8 编码的文本、内容长度正确等。

关于java - Angular 和 Java Jersey API 存在问题,末尾编码 utf-8 空格无效 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59241863/

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