[英]Jersey 2.29.1 Response Encoding Issue with AWS Api Gateway+ AWS Lambda +Scala
我在返回特殊字符(漢字)時遇到問題。 我的流程遵循 AWS API Gateway 調用 Lambda(包含 Jersey 2.29.1)
在返回響應之前,我將其打印在日志和雲監視日志中,我可以看到如下響應
{
"names": [
"驊威文化股份有限公司"
]
}
但是當 API 返回的響應如下(在 ISO-8859-1 中編碼)
{
"names": [
"éªå¨æåè¡ä»½æéå¬å¸"
]
}
我用來返回響應的代碼是
return Response.status(200).header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build()
使用這些對返回方法的注釋
@Consumes(Array(MediaType.APPLICATION_JSON))
@Produces(Array(MediaType.APPLICATION_JSON))
我已經嘗試了社區博客中提到的所有選項,例如更改注釋以在生產注釋中添加“UTF-8”字符串,如@Produces(Array(MediaType.APPLICATION_JSON + ";charset=UTF-8"))
。 在我使用的響應構建器代碼中添加 Content-Type 標頭是return Response.status(200).encoding("UTF-8").header("Access-Control-Allow-Origin", "*").entity(gson.toJson(response)).build()
。
在此之后,我克隆了jersey repo並查看了它使用的默認編碼是“ISO-8859-1”的代碼。 在這里你可以看到 org.glassfish.jersey.jdk.connector.internal.HttpParser 的第 32 行包含private static final String ENCODING = "ISO-8859-1";
有沒有辦法設置一些屬性或添加一些自定義過濾器,以便我可以更新此編碼以使用 UTF-8 並獲得正確的響應?
你有沒有在你的 lambda 處理程序中嘗試過這個?
LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.