AWS Api Gateway+ AWS Lambda +Scala 的 Jersey 2.29.1 响应编码问题

Jersey 2.29.1 Response Encoding Issue with AWS Api Gateway+ AWS Lambda +Scala

我在 return 输入特殊字符(汉字)时遇到问题。 我的流程如下 AWS API 网关调用 Lambda(包含 Jersey 2.29.1)

在 returning 响应之前,我将其打印在日志和 cloud-watch 日志中,我可以看到如下响应

{
    "names": [
    "骅威文化股份有限公司"
     ]
}

但是当 API 编辑的 return 响应如下(以 ISO-8859-1 编码)

{
    "names": [
    "éªå¨æåè¡ä»½æéå¬å¸"
     ]
}

我用来 return 响应的代码是

return Response.status(200).header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build()

将这些注释添加到 returning 方法

@Consumes(Array(MediaType.APPLICATION_JSON))
@Produces(Array(MediaType.APPLICATION_JSON))

我已经尝试了社区博客中提到的所有选项,例如更改注释以在生成的注释中添加 "UTF-8" 字符串,例如 @Produces(Array(MediaType.APPLICATION_JSON + ";charset=UTF-8")) 。要在响应构建器代码中添加 Content-Type header,我使用的是 return Response.status(200).encoding("UTF-8").header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build().

在此之后,我克隆了 jersey repo 并查看了代码,它使用的默认编码是 "ISO-8859-1"。在这里你可以看到第 32 行 org.glassfish.jersey.jdk.connector.internal.HttpParser 包含 private static final String ENCODING = "ISO-8859-1";

有没有办法设置一些 属性 或添加一些自定义过滤器,以便我可以更新此编码以使用 UTF-8 并获得正确的响应?

您在 lambda 处理程序中尝试过这个吗?

LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8");

reference